Respostas:
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 tudo
Já faz um tempo desde a última vez que usei o Python, mas acredito que você pode usar py_compile
:
import py_compile
py_compile.compile("file.py")
__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:
python -m py_compile File1.py File2.py File3.py ...
-m
especifica o nome do (s) módulo (s) a ser compilado.
Ou, para compilação interativa de arquivos
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.
Usando py_compile.compile
:
import py_compile
py_compile.compile('YourFileName.py')
Usando py_compile.main()
:
Compila vários arquivos por vez.
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
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()
:
import compileall
compileall.compile_dir(direname)
Ele compila todos os arquivos Python presentes no diretório fornecido.
Usando compileall.compile_file()
:
import compileall
compileall.compile_file('YourFileName.py')
Dê uma olhada nos links abaixo:
py_compile
e compileall
NÃO py_compile.py
ou compileall.py
. Em outras palavras, deveria ser python3 -m py_compile PYTHON_FILENAME
ou python3 -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.
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) #
python -m compileall <pythonic-project-name>
que faz com que compilar tudo .py
para .pyc
no projeto que continha as subpastas.
python3 -m compileall <pythonic-project-name>
o que compila tudo .py
nas __pycache__
pastas do projeto que continham as subpastas.
Ou com escurecimento deste post :
Você pode aplicar o mesmo layout de
.pyc
arquivos nas pastas que no Python2 usando:
python3 -m compileall -b <pythonic-project-name>
A opção
-b
aciona a saída dos.pyc
arquivos para seus locais herdados (ou seja, o mesmo que no Python2).
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.
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)
consulte ☞docs.python.org para obter documentação detalhada