Por alguma razão, não posso depender da instrução "import" do Python para gerar o arquivo .pyc automaticamente
Existe uma maneira de implementar uma função da seguinte maneira?
def py_to_pyc(py_filepath, pyc_filepath):
...
Você pode usar compileall
no terminal. O comando a seguir irá recursivamente para subdiretórios e criará arquivos pyc para todos os arquivos python encontrados. O módulo compileall faz parte da biblioteca padrão do python, portanto você não precisa instalar nada extra para usá-lo. Isso funciona exatamente da mesma maneira para python2 e python3.
python -m compileall .
-O
flag, para compilação de bytecode (.pyo file iso .pyc).compileall
no meu site-pacotes de pasta e sujou-se tudoVocê pode compilar arquivos individuais na linha de comando com:
fonte
Já faz um tempo desde a última vez que usei o Python, mas acredito que você pode usar
py_compile
:fonte
__pycache__/file.cpython-32.pyc
e você obtém isso como o valor de retorno.Encontrei várias maneiras de compilar scripts python no bytecode
Usando
py_compile
no terminal:-m
especifica o nome do (s) módulo (s) a ser compilado.Ou, para compilação interativa de arquivos
Usando
py_compile.compile
:Usando
py_compile.main()
:Compila vários arquivos por vez.
A lista pode crescer enquanto você desejar. Como alternativa, você pode obviamente passar uma lista de arquivos nos nomes principais ou pares de arquivos na linha de comando args.
Ou, se você passar
['-']
no main, ele poderá compilar arquivos interativamente.Usando
compileall.compile_dir()
:Ele compila todos os arquivos Python presentes no diretório fornecido.
Usando
compileall.compile_file()
:Dê uma olhada nos links abaixo:
https://docs.python.org/3/library/py_compile.html
https://docs.python.org/3/library/compileall.html
fonte
py_compile
ecompileall
NÃOpy_compile.py
oucompileall.py
. Em outras palavras, deveria serpython3 -m py_compile PYTHON_FILENAME
oupython3 -m compileall PYTHON_FILES_DIRECTORY
.Eu usaria compileall . Funciona bem tanto a partir de scripts quanto a partir da linha de comando. É um módulo / ferramenta de nível um pouco mais alto do que o py_compile já mencionado que ele também usa internamente.
fonte
compileall
não inclui lógica para ignorar arquivos para os quais o.pyc
arquivo correspondente já está atualizado, não é?compileall
ignora arquivos que já possuem uma atualização.pyc
(testada com o Python 2.7.11) #No Python2 você pode usar:
que faz com que compilar tudo
.py
para.pyc
no projeto que continha as subpastas.No Python3 você pode usar:
o que compila tudo
.py
nas__pycache__
pastas do projeto que continham as subpastas.Ou com escurecimento deste post :
fonte
Para corresponder aos requisitos da pergunta original (caminho de origem e destino), o código deve ser o seguinte:
Se o código de entrada tiver erros, a exceção py_compile.PyCompileError será gerada.
fonte
Há duas maneiras de fazer isso
Se você estiver usando a linha de comando, use
python -m compileall <argument>
para compilar o código python em código binário python. Ex:python -m compileall -x ./*
Ou, você pode usar esse código para compilar sua biblioteca em código de bytes.
consulte ☞docs.python.org para obter documentação detalhada
fonte