Câu trả lời:
Bạn có thể sử dụng compilealltrong thiết bị đầu cuối. Lệnh sau sẽ đi đệ quy vào các thư mục con và tạo các tệp pyc cho tất cả các tệp python mà nó tìm thấy. Các compileall Module này là một phần của thư viện chuẩn trăn, do đó bạn không cần phải cài đặt bất cứ điều gì thêm để sử dụng nó. Điều này hoạt động chính xác theo cách tương tự cho python2 và python3.
python -m compileall .
-Ocờ, để biên dịch mã byte (.pyo iso .pyc).
compileallthư mục trên gói trang web của tôi và nó đã làm rối tung mọi thứ
Đã được một thời gian kể từ lần cuối tôi sử dụng Python, nhưng tôi tin rằng bạn có thể sử dụng py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pycvà bạn lấy đó làm giá trị trả về.
Tôi đã tìm thấy một số cách để biên dịch các kịch bản python thành mã byte
Sử dụng py_compiletrong thiết bị đầu cuối:
python -m py_compile File1.py File2.py File3.py ...
-m chỉ định tên mô-đun sẽ được biên dịch.
Hoặc, để biên dịch tương tác các tập tin
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.Sử dụng py_compile.compile:
import py_compile
py_compile.compile('YourFileName.py')Sử dụng py_compile.main():
Nó biên dịch một số tập tin tại một thời điểm.
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
Danh sách có thể phát triển miễn là bạn muốn. Ngoài ra, rõ ràng bạn có thể chuyển một danh sách các tệp trong tên chính hoặc thậm chí tên tệp trong dòng lệnh args.
Hoặc, nếu bạn truyền ['-']vào chính thì nó có thể biên dịch các tệp tương tác.
Sử dụng compileall.compile_dir():
import compileall
compileall.compile_dir(direname)
Nó biên dịch mọi tệp Python duy nhất có trong thư mục được cung cấp.
Sử dụng compileall.compile_file():
import compileall
compileall.compile_file('YourFileName.py')Hãy xem các liên kết dưới đây:
py_compilevà compileallKHÔNG py_compile.pyhoặc compileall.py. Nói cách khác, nó nên python3 -m py_compile PYTHON_FILENAMEhoặc python3 -m compileall PYTHON_FILES_DIRECTORY.
Tôi sẽ sử dụng compileall . Nó hoạt động độc đáo cả từ kịch bản và từ dòng lệnh. Đó là mô-đun / công cụ cấp cao hơn một chút so với py_compile đã được đề cập mà nó cũng sử dụng nội bộ.
compileallkhông bao gồm logic để bỏ qua các tệp mà .pyctệp tương ứng đã được cập nhật, phải không?
compileallkhông bỏ qua các tệp đã được cập nhật .pyc(đã được thử nghiệm với Python 2.7.11)
python -m compileall <pythonic-project-name>
mà biên dịch tất cả .pythành .pyctrong dự án có chứa các thư mục con.
python3 -m compileall <pythonic-project-name>
mà biên dịch tất cả .pyvào các __pycache__thư mục trong dự án có chứa các thư mục con.
Hoặc với màu nâu từ bài đăng này :
Bạn có thể thực thi cùng bố cục các
.pyctệp trong các thư mục như trong Python2 bằng cách sử dụng:
python3 -m compileall -b <pythonic-project-name>Tùy chọn
-bkích hoạt đầu ra của.pyccác tệp đến các vị trí kế thừa của chúng (tức là giống như trong Python2).
Nếu bạn đang sử dụng dòng lệnh, hãy sử dụng python -m compileall <argument>để biên dịch mã python thành mã nhị phân python. Ví dụ:python -m compileall -x ./*
Hoặc, Bạn có thể sử dụng mã này để biên dịch thư viện của mình thành mã byte.
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)
nhìn vào ☞ docs.python.org để biết tài liệu chi tiết