Как скомпилировать python файл в pyc
При выполнении скрипта на языке Python все выполнение в общем случае разбивается на две стадии:
- Файл с кодом (файл с расширением .py ) компилируется в промежуточный байткод.
- Далее скомпилированный байткодом интерпретируется, то есть происходит собственно выполнение программы
При этом нам не надо явным образом генерировать никакой байткод, он создается неявно при выполнении скрипта Python. Если программа импортирует внешние модули/библиотеки и они импортируются первый раз, то их скомпилированный байткод сохраняется сохраняется в файле с расширением .pyc и кэшируется в каталоге __pycache__ в папке, где расположен файл с кодом python. Если мы вносим в исходный файл библиотеки изменения, то Python перекомпилирует файл байткода. Если изменений в коде нет, то загружается ранее скомпилированный байткод из файла *.pyc . Это позволяет оптимизировать работу с приложением, быстрее его компилировать и выполнять.
Однако байткод основного скрипта, который представляет основной файл программы и который передается интерпретатору python, не сохраняется в файле *.pyc и перекомпилируется каждый раз при запуске приложения.
Допустим, в папке проекта у нас размещен файл user.py со простейшей функцией, которая принимает два параметра и выводит их значения:
def printUser(username, userage): print(f"Name: Age:")
Подключим этот файл в главном модуле программы, который пусть называется app.py :
import user username = "Tom" userage = 39 user.printUser(username, userage)
При выполнении этого скрипта в папке проекте (где располагается модуль «user.py») будет создан каталог __pycache__ . А в нем будет сгенерирован файл байткода, который будет наподобие следующего user.cpython-версия.pyc , где в качестве версии будет применяться версия используемого интерпретатора, например, 311 (для версии Python 3.11). Сгенерированный pyc -файл является бинарным, поэтому текстовом редакторе нет смысла его открывать.
Ручная компиляция байткода
Хотя файл байткода создается автоматически, мы вручную можем его сгенерировать. Для этого есть несколько способов: компиляция с помощью скрипта py_compile и компиляция с помощью модуля compileall .
Скрипт py_compile применяется для компиляции отдельных файлов. Для компиляции произвольного скрипта user.py в файл с байткодом мы могли бы использовать следующую программу:
import py_compile py_compile.compile("user.py") # передаем путь к скрипту
Для компиляции в функцию compile() передаем путь к скрипту. После выполнения программы в текущей папке также будет сгенерирован каталог __pycache__ , а в нем файл user.cpython-311.pyc
Модуль compileall применяется для компиляции всех файлов Python по определенным путям. Например, скомпилируем все файлы в каталоге C:/python/files
python -m compileall c:\python\files
По умолчанию компилируются даже те файлы, которые содержатся в подкаталогах. Если надо скомпилировать только те файлы, которые располагаются непосредственно в указанно папке, то применяется опция -l
python -m compileall c:\python\files -l
Компиляция в .pyc
Как исходник из .py файла скомпилировать в .pyc файл? Мой Python 3.2, по какой то причине, сам это не делает, почитал опции интерпретатора — нашел только флаг на отсутствие создания файла .pyc. Неужели он поумолчанию включен? Если так, то как его выключить? Заранее спасибо.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Компиляция в .pyc
Добрый день! я тоже не большой знаток питонов, но описаный выше способ опробовал файл рус. стал.
py и pyc файлы
Доброго времени суток. Работаю в одном приложении. В нем есть возможность, писать расширения.
Не создаётся файл .pyc
На сколько мне извесно, после выполнения файла .py, должен создаваться файл .pyc с байт-кодом, а.
Редактирование файлов .pyc
Приветы! Столкнулся с зашифрованными файлами .pyc, нужно их редактировать а навыков ноль. Помогите.
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 964
Записей в блоге: 16
импортируйте этот файл(import имяфайла) и обычно в папке с файлом .py появляется файл .pyc.
А также есть документация вот тут
Регистрация: 05.12.2011
Сообщений: 182
Спасибо. Насколько я понимаю, это обычный байт-код(тоесть не будет проблем с переносимостью на другие платформы и версии интерепретатора)?
Просто немного напрягло то, что к имени файла было добавлено «.cpython-32».
Добавлено через 1 час 21 минуту
И что значит ‘Bad magic number in .pyc file'(выдает при запуске pyc файла)?
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 964
Записей в блоге: 16
Сообщение от an1s1 
Спасибо. Насколько я понимаю, это обычный байт-код(тоесть не будет проблем с переносимостью на другие платформы и версии интерепретатора)?
С переносимостью проблем не должно быть, а вот вроде с версией интерпретатора могут возникнуть проблемы.
Регистрация: 05.12.2011
Сообщений: 182
Спасибо, а проблемма с ShaBang’ом походу была из-за того, что pyc запускался на старой версии питона.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Редактирование файла .pyc
Добрый день! Подскажите, как мне отредактировать файл .pyc? Спасибо 🙂 Добавлено через 4 минуты.

Как декомпилировать .pyc?
Как декомпилировать .pyc? В интернете висит куча инструкций, но на таджикском. Какие-то скрипты.
Просмотреть функции в *pyc
У меня есть питоновский файл *pyc. Требуется просмотреть функции или классы данного файла! Как это.
Декомпиляция pyc файла игры worldoftanks
помогите с декомпиляцией pyc файла CompanyAutoEnter.pyc запускаю декомпиляцию — не получается.
Как открыть или скомпилировать файл .pyc?
Добрый вечер! Подскажите, как открыть или скомпилировать файл .pyc? Скачал питон, пробовал открыть.
как декомпилировать в исходник файлы байткода .pyc.
Добрый день! Я скомпилировал свой проект с помощью pyinstaller, и случайно удалил исходный код, а.
Динамическая компиляция (компиляция программы в программе)
Привет форумчане, встретился с такой проблемой,мне в курсовой работе сказали сделать чтобы с.
Python — возможно ли скомпилировать *.py в *.pyc, при отсутствии некоторых нужных модулей, чтобы компилятор «закрыл на это глаза»?
Зачем нужен этот изврат:
чтобы вносить изменения в приложение, не пересобирая его целиком из исходного кода, а то и вообще не имея такового. И также не декомпилируя его полностью (там целая куча этих *.pyc, а изменить нужно лишь 1).
Отслеживать
задан 6 дек 2017 в 5:49
SimAlllllll SimAlllllll
31 5 5 бронзовых знаков
Связанный вопрос: Компиляция на Python кода Python
6 дек 2017 в 8:18
@andreymal И причем здесь eval?
6 дек 2017 в 8:29
Посмотрите внимательнее, там не только про eval
6 дек 2017 в 9:33
cвязанный вопрос Компиляция на Python кода Python
7 дек 2017 в 8:16
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
чтобы компилятор «закрыл на это глаза»
Компилятор не делает никаких проверок кода, кроме синтаксических. Все ошибки импорта, несуществующих переменных и прочей такой дребедени происходят уже во время интерпретации заранее скомпилированного байткода.
А для компиляции байткода без его последующего запуска можно использовать модуль py_compile :
python -m py_compile yourfile.py
В Python 2 будет создан yourfile.pyc , в Python 3 будет создан __pycache__/yourfile.cpython-3N.pyc .
Также есть compileall , который умеет компилировать не только отдельные файлы, но и всё содержимое указанных каталогов рекурсивно:
python -m compileall путь-к-каталогу-с-модулями/
Гайд Как скомпилить и задекомпилить .pyc файл в Python
Для компиляции .py файлов в .pyc файлы в Python можно использовать встроенный модуль py_compile. Для этого необходимо выполнить следующий код в терминале:
python -m py_compile script.py
После этого в той же директории, где находится исходный файл script.py, будет создан скомпилированный файл script.pyc.
Декомпиляция .pyc файлов в .py файлы
Для декомпиляции .pyc файлов в .py файлы в Python можно использовать модуль uncompyle6. Для установки модуля можно воспользоваться менеджером пакетов pip следующим образом:
pip install uncompyle6
После установки модуля можно выполнить следующий код в терминале, чтобы декомпилировать скомпилированный файл script.pyc:
uncompyle6 script.pyc > script.py
После этого в той же директории, где находится скомпилированный файл script.pyc, будет создан исходный файл script.py.
Теперь вы знаете, как скомпилировать и задекомпилировать .pyc файлы в Python. Это может быть полезным, например, при отладке или изучении чужого кода.
