По какой-то причине я не могу зависеть от оператора "import" Python для автоматического создания файла .pyc.
Есть ли способ реализовать функцию следующим образом?
def py_to_pyc(py_filepath, pyc_filepath):
...
По какой-то причине я не могу зависеть от оператора "import" Python для автоматического создания файла .pyc.
Есть ли способ реализовать функцию следующим образом?
def py_to_pyc(py_filepath, pyc_filepath):
...
Вы можете использовать compileall в терминале. Следующая команда перейдет рекурсивно в подкаталоги и сделает файлы pyc для всех найденных файлов python. Модуль compileall является частью стандартной библиотеки python, поэтому вам не нужно устанавливать что-либо дополнительное для ее использования. Это работает точно так же для python2 и python3.
python -m compileall .
Прошло некоторое время с тех пор, как я последний раз использовал Python, но считаю, что вы можете использовать py_compile
:
import py_compile
py_compile.compile("file.py")
Вы можете скомпилировать отдельные файлы из командной строки с помощью
python -m compileall <file_1>.py <file_n>.py
Я нашел несколько способов компилировать скрипты Python в байт-код
Использование py_compile
в терминале:
python -m py_compile File1.py File2.py File3.py ...
-m
указывает имя модуля (модулей) для компиляции.
Или для интерактивной компиляции файлов
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.
Использование py_compile.compile
:
import py_compile
py_compile.compile('YourFileName.py')
Используя py_compile.main()
:
Он компилирует несколько файлов одновременно.
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
Список может расти сколько угодно. Кроме того, вы можете явно передать список файлов в основном или даже имена файлов в аргументах командной строки.
Или, если вы передадите ['-']
в main, то он может скомпилировать файлы в интерактивном режиме.
Использование compileall.compile_dir()
:
import compileall
compileall.compile_dir(direname)
Он компилирует каждый файл Python, присутствующий в предоставленном каталоге.
Использование compileall.compile_file()
:
import compileall
compileall.compile_file('YourFileName.py')
Взгляните на ссылки ниже:
Я бы использовал compileall. Он отлично работает как из сценариев, так и из командной строки. Это немного более высокий уровень модуля/инструмента, чем уже упомянутый py_compile, который он также использует внутри.
Чтобы соответствовать исходным требованиям вопроса (исходный путь и целевой путь), код должен быть таким:
import py_compile
py_compile.compile(py_filepath, pyc_filepath)
Если во входном коде есть ошибки, то возникает исключение py_compile.PyCompileError.
python -m compileall <pythonic-project-name>
что заставляет компилировать все .py
в .pyc
в проекте, который содержит подпапки.
python3 -m compileall <pythonic-project-name>
что заставляет компилировать все .py
в папки __pycache__
в проекте, который содержит подпапки.
Или с Browning из этого поста:
Вы можете использовать тот же макет файлов
.pyc
в папках, что и в Python2, используя:
python3 -m compileall -b <pythonic-project-name>
Опция -b запускает вывод файлов
.pyc
в их прежние местоположения (т.е. Так же, как в Python2).