Как я могу вручную создать файл .pyc из файла .py

По какой-то причине я не могу зависеть от оператора "import" Python для автоматического создания файла .pyc.

Есть ли способ реализовать функцию следующим образом?

def py_to_pyc(py_filepath, pyc_filepath):
    ...

Ответ 1

Вы можете использовать compileall в терминале. Следующая команда перейдет рекурсивно в подкаталоги и сделает файлы pyc для всех найденных файлов python. Модуль compileall является частью стандартной библиотеки python, поэтому вам не нужно устанавливать что-либо дополнительное для ее использования. Это работает точно так же для python2 и python3.

python -m compileall .

Ответ 2

Прошло некоторое время с тех пор, как я последний раз использовал Python, но считаю, что вы можете использовать py_compile:

import py_compile
py_compile.compile("file.py")

Ответ 3

Вы можете скомпилировать отдельные файлы из командной строки с помощью

python -m compileall <file_1>.py <file_n>.py

Ответ 4

Я нашел несколько способов компилировать скрипты Python в байт-код

  1. Использование py_compile в терминале:

    python -m py_compile File1.py File2.py File3.py ...
    

    -m указывает имя модуля (модулей) для компиляции.

    Или для интерактивной компиляции файлов

    python -m py_compile -
    File1.py
    File2.py
    File3.py
       .
       .
       .
    
  2. Использование py_compile.compile:

    import py_compile
    py_compile.compile('YourFileName.py')
    
  3. Используя py_compile.main():

    Он компилирует несколько файлов одновременно.

    import py_compile
    py_compile.main(['File1.py','File2.py','File3.py'])
    

    Список может расти сколько угодно. Кроме того, вы можете явно передать список файлов в основном или даже имена файлов в аргументах командной строки.

    Или, если вы передадите ['-'] в main, то он может скомпилировать файлы в интерактивном режиме.

  4. Использование compileall.compile_dir():

    import compileall
    compileall.compile_dir(direname)
    

    Он компилирует каждый файл Python, присутствующий в предоставленном каталоге.

  5. Использование compileall.compile_file():

    import compileall
    compileall.compile_file('YourFileName.py')
    

Взгляните на ссылки ниже:

https://docs.python.org/3/library/py_compile.html

https://docs.python.org/3/library/compileall.html

Ответ 5

Я бы использовал compileall. Он отлично работает как из сценариев, так и из командной строки. Это немного более высокий уровень модуля/инструмента, чем уже упомянутый py_compile, который он также использует внутри.

Ответ 6

Чтобы соответствовать исходным требованиям вопроса (исходный путь и целевой путь), код должен быть таким:

import py_compile
py_compile.compile(py_filepath, pyc_filepath)

Если во входном коде есть ошибки, то возникает исключение py_compile.PyCompileError.

Ответ 7

В Python2 вы можете использовать:

python -m compileall <pythonic-project-name>

что заставляет компилировать все .py в .pyc в проекте, который содержит подпапки.


В Python3 вы можете использовать:

python3 -m compileall <pythonic-project-name>

что заставляет компилировать все .py в папки __pycache__ в проекте, который содержит подпапки.

Или с Browning из этого поста:

Вы можете использовать тот же макет файлов .pyc в папках, что и в Python2, используя:

python3 -m compileall -b <pythonic-project-name>

Опция -b запускает вывод файлов .pyc в их прежние местоположения (т.е. Так же, как в Python2).