По какой-то причине я не могу полагаться на оператор Python "import" для автоматического создания файла .pyc.
Есть ли способ реализовать следующую функцию?
def py_to_pyc(py_filepath, pyc_filepath):
...
Вы можете использовать compileall
в терминале. Следующая команда будет рекурсивно переходить в подкаталоги и создавать файлы pyc для всех найденных файлов python. Модуль compileall является частью стандартной библиотеки python, поэтому вам не нужно ничего устанавливать для его использования. Это работает точно так же для python2 и python3.
python -m compileall .
-O
флаг для компиляции байт-кода (файл .pyo, iso .pyc).compileall
папку на моем сайте-пакеты, и она все испортилаВы можете скомпилировать отдельные файлы из командной строки с помощью:
источник
Прошло много времени с тех пор, как я в последний раз использовал Python, но я считаю, что вы можете использовать
py_compile
:источник
__pycache__/file.cpython-32.pyc
и вы получаете это как возвращаемое значение.Я нашел несколько способов скомпилировать скрипты Python в байт-код
Использование
py_compile
в терминале:-m
указывает имя модуля (модулей) для компиляции.Или для интерактивной компиляции файлов
Использование
py_compile.compile
:Использование
py_compile.main()
:Он компилирует несколько файлов за раз.
Список может расти сколько угодно долго. В качестве альтернативы, вы можете явно передать список файлов в главном или даже имена файлов в аргументах командной строки.
Или, если вы перейдете
['-']
в main, он может компилировать файлы в интерактивном режиме.Использование
compileall.compile_dir()
:Он компилирует каждый файл Python, присутствующий в предоставленном каталоге.
Использование
compileall.compile_file()
:Взгляните на ссылки ниже:
https://docs.python.org/3/library/py_compile.html
https://docs.python.org/3/library/compileall.html
источник
py_compile
иcompileall
NOTpy_compile.py
илиcompileall.py
. Другими словами, должно бытьpython3 -m py_compile PYTHON_FILENAME
илиpython3 -m compileall PYTHON_FILES_DIRECTORY
.Я бы использовал compileall . Он прекрасно работает как из скриптов, так и из командной строки. Это модуль / инструмент более высокого уровня, чем уже упомянутый py_compile, который он также использует для внутренних целей.
источник
compileall
не включает логику для пропуска файлов, для которых соответствующий.pyc
файл уже обновлен, не так ли?compileall
делает пропускать файлы , которые уже есть уточненный.pyc
(протестировано с Python 2.7.11)В Python2 вы можете использовать:
что делает компилировать все ,
.py
чтобы.pyc
в проекте , который содержит вложенные папки.В Python3 вы можете использовать:
что заставляет компилировать все
.py
в__pycache__
папки проекта, содержащие вложенные папки.Или с поджариванием из этого поста :
источник
Чтобы соответствовать исходным требованиям к вопросу (исходный путь и путь назначения), код должен быть таким:
Если во входном коде есть ошибки, возникает исключение py_compile.PyCompileError .
источник
Есть два способа сделать это
Если вы используете командную строку, используйте
python -m compileall <argument>
для компиляции кода Python в двоичный код Python. Пример:python -m compileall -x ./*
Или вы можете использовать этот код для компиляции вашей библиотеки в байт-код.
посмотреть на ☞ docs.python.org для подробной документации
источник