Ответы:
Вы можете использовать compileallв терминале. Следующая команда будет рекурсивно переходить в подкаталоги и создавать файлы pyc для всех найденных файлов python. Модуль compileall является частью стандартной библиотеки python, поэтому вам не нужно ничего устанавливать для его использования. Это работает точно так же для python2 и python3.
python -m compileall .
-Oфлаг для компиляции байт-кода (файл .pyo, iso .pyc).
compileallпапку на моем сайте-пакеты, и она все испортила
Прошло много времени с тех пор, как я в последний раз использовал Python, но я считаю, что вы можете использовать py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pycи вы получаете это как возвращаемое значение.
Я нашел несколько способов скомпилировать скрипты 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')Взгляните на ссылки ниже:
py_compileи compileallNOT py_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)
python -m compileall <pythonic-project-name>
что делает компилировать все , .pyчтобы .pycв проекте , который содержит вложенные папки.
python3 -m compileall <pythonic-project-name>
что заставляет компилировать все .pyв __pycache__папки проекта, содержащие вложенные папки.
Или с поджариванием из этого поста :
Вы можете добиться того же расположения
.pycфайлов в папках, что и в Python2, используя:
python3 -m compileall -b <pythonic-project-name>Эта опция
-bзапускает вывод.pycфайлов в их унаследованные местоположения (т.е. такие же, как в Python2).
Если вы используете командную строку, используйте python -m compileall <argument>для компиляции кода Python в двоичный код Python. Пример:python -m compileall -x ./*
Или вы можете использовать этот код для компиляции вашей библиотеки в байт-код.
import compileall
import os
lib_path = "your_lib_path"
build_path = "your-dest_path"
compileall.compile_dir(lib_path, force=True, legacy=True)
def compile(cu_path):
for file in os.listdir(cu_path):
if os.path.isdir(os.path.join(cu_path, file)):
compile(os.path.join(cu_path, file))
elif file.endswith(".pyc"):
dest = os.path.join(build_path, cu_path ,file)
os.makedirs(os.path.dirname(dest), exist_ok=True)
os.rename(os.path.join(cu_path, file), dest)
compile(lib_path)
посмотреть на ☞ docs.python.org для подробной документации