Đ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 .pychoặc .pyotệp sẽ càng nhỏ so với .pytệp nguồn .
Thứ năm: một người dùng cuối chỉ có một .pychoặc một .pyotậ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 .pyctệp theo cách này:
python -m py_compile myscript.py
Điều này loại bỏ ý kiến. Nó docstringscò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 .pyotệp thay vì một .pyctệ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 docstringsngay từ đầu). Nhưng xem nhược điểm ba, dưới đây.
Lưu ý rằng python sử dụng .pyngà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 .pytập tin như trái ngược với .pychoặc .pyotập tin --- để chỉnh sửa tập tin py của bạn, và .pychoặc .pyolà 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 .pychoặc .pyolợ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 .pycvà .pyocá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 .pychoặc .pyokhông có liên kết .pyđể biên dịch lại hoặc touchdo đó, nó sẽ thay thế .pychoặc .pyo, người dùng cuối cũng không thể sửa nó.
Thứ hai: Nếu docstringsbị bỏ qua với việc sử dụng -OOtù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: -OOTùy chọn của Python cũng thực hiện một số tối ưu hóa theo -Otù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/pythontrên dòng đầu tiên, thì tập tin này sẽ bị loại bỏ .pycvà .pyocá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.