Відповіді:
Ви можете використовувати compileallв терміналі. Наступна команда буде рекурсивно переходити в підкаталоги та робити файли pyc для всіх знайдених файлів python. Модуль компіляції є частиною стандартної бібліотеки 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'])
Список може зростати скільки завгодно. Крім того, ви, очевидно, можете передавати список файлів в основних або навіть імен файлів у аргументах командного рядка.
Або, якщо ви переходите ['-']в основний, то він може збирати файли інтерактивно.
Використання 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)
див. at docs.python.org для отримання детальної документації