Điểm cộng:
Đầu tiên: nhẹ, thất bại obfuscation.
Thứ hai: nếu quá trình biên dịch dẫn đến một tệp nhỏ hơn đáng kể, bạn sẽ nhận được thời gian tải nhanh hơn. Đẹp cho web.
Thứ ba: Python có thể bỏ qua bước biên dịch. Nhanh hơn khi tải trọng. Đẹp cho CPU và web.
Thứ tư: bạn càng nhận xét nhiều, tệp .pyc
hoặc .pyo
tệp sẽ càng nhỏ so với .py
tệp nguồn .
Thứ năm: một người dùng cuối chỉ có một .pyc
hoặc một .pyo
tập tin trong tay ít có khả năng đưa ra cho bạn một lỗi mà họ gây ra bởi một thay đổi không được hoàn nguyên mà họ quên nói với bạn.
Thứ sáu: nếu bạn đang nhắm đến một hệ thống nhúng, việc lấy một tệp có kích thước nhỏ hơn để nhúng có thể đại diện cho một điểm cộng đáng kể và kiến trúc ổn định nên một nhược điểm, chi tiết dưới đây, không phát huy tác dụng.
Biên soạn cấp cao nhất
Thật hữu ích khi biết rằng bạn có thể biên dịch tệp nguồn python cấp cao nhất thành một .pyc
tệp theo cách này:
python -m py_compile myscript.py
Điều này loại bỏ ý kiến. Nó docstrings
còn nguyên. Nếu bạn cũng muốn thoát khỏi điều đó docstrings
(bạn có thể muốn nghiêm túc suy nghĩ về lý do tại sao bạn làm điều đó) thì hãy biên dịch theo cách này thay vì ...
python -OO -m py_compile myscript.py
... và bạn sẽ nhận được một .pyo
tệp thay vì một .pyc
tệp; phân phối đồng đều về chức năng thiết yếu của mã, nhưng nhỏ hơn bởi kích thước của phần bị loại bỏ docstrings
(và ít dễ hiểu hơn cho việc làm tiếp theo nếu nó có vị trí tốt docstrings
ngay từ đầu). Nhưng xem nhược điểm ba, dưới đây.
Lưu ý rằng python sử dụng .py
ngày của tập tin, nếu nó hiện diện, để quyết định liệu có nên thực hiện .py
tập tin như trái ngược với .pyc
hoặc .pyo
tập tin --- để chỉnh sửa tập tin py của bạn, và .pyc
hoặc .pyo
là lỗi thời và bất cứ điều gì có lợi cho bạn đạt được sẽ bị mất. Bạn cần biên dịch lại nó để lấy lại .pyc
hoặc .pyo
lợi ích một lần nữa, chẳng hạn như chúng có thể.
Hạn chế:
Đầu tiên: Có một "cookie ma thuật" trong .pyc
và .pyo
các tệp cho biết kiến trúc hệ thống mà tệp python đã được biên dịch. Nếu bạn phân phối một trong các tệp này vào một môi trường thuộc loại khác, nó sẽ bị hỏng. Nếu bạn phân phối .pyc
hoặc .pyo
không có liên kết .py
để biên dịch lại hoặc touch
do đó, nó sẽ thay thế .pyc
hoặc .pyo
, người dùng cuối cũng không thể sửa nó.
Thứ hai: Nếu docstrings
bị bỏ qua với việc sử dụng -OO
tùy chọn dòng lệnh như được mô tả ở trên, không ai có thể nhận được thông tin đó, điều này có thể khiến việc sử dụng mã trở nên khó khăn hơn (hoặc không thể.)
Thứ ba: -OO
Tùy chọn của Python cũng thực hiện một số tối ưu hóa theo -O
tùy chọn dòng lệnh; điều này có thể dẫn đến những thay đổi trong hoạt động. Tối ưu hóa được biết đến là:
sys.flags.optimize
= 1
assert
báo cáo bị bỏ qua
__debug__
= Sai
Thứ tư: nếu bạn cố tình làm cho tập lệnh python của bạn có thể thực thi được bằng thứ gì đó theo thứ tự #!/usr/bin/python
trên dòng đầu tiên, thì tập tin này sẽ bị loại bỏ .pyc
và .pyo
các tập tin và chức năng đó bị mất.
Thứ năm: hơi rõ ràng, nhưng nếu bạn biên dịch mã của mình, không chỉ việc sử dụng nó có thể bị ảnh hưởng mà khả năng người khác học hỏi từ công việc của bạn cũng bị giảm đi, thường là nghiêm trọng.