Câu trả lời:
Các ứng dụng Python được đóng gói tốt đang được biên dịch thành .pyc
các tệp trong tập lệnh chạy sau khi cài đặt các tệp đã diễn ra. Điều này là cần thiết theo các hướng dẫn đóng gói để có thể chấp nhận cài đặt Python mà bạn đang sử dụng tại thời điểm đó. Hãy nhớ rằng .pyc
các tệp rất cụ thể cho hệ thống của bạn (phiên bản Python và các phụ thuộc).
Do đó .pyo
, tất cả và .pyc
các tệp được loại trừ cụ thể trong các gói và được Lintian gắn thẻ là lỗi :
Các tập tin nguồn python biên dịch không được bao gồm trong gói. Những tập tin này nên được gỡ bỏ khỏi gói và được tạo tại thời điểm cài đặt gói trong postinst.
Tham khảo Chính sách Python của Debian phần 2.6 ( Mô-đun Byte-Compilation ) để biết chi tiết.
Mức độ nghiêm trọng: nghiêm trọng, chắc chắn: nhất định
Trong trường hợp python-numpy
biên dịch byte sau khi cài đặt này được xử lý bởi hook gỡ lỗi của pycentral. Sau khi cài đặt, nó trông như thế này:
ls -l /usr/lib/python2.7/dist-packages/numpy
lrwxrwxrwx 1 root root 47 Mar 20 2012 add_newdocs.py -> ../../../../share/pyshared/numpy/add_newdocs.py
-rw-r--r-- 1 root root 251912 Aug 6 22:06 add_newdocs.pyc
Lý do tại sao những .pyc
/ .pyo
tệp này không được biên dịch trong thời gian chạy trong lần khởi động ứng dụng đầu tiên như bạn mong đợi là như sau.
Các tệp Python được cài đặt trong một thư mục toàn hệ thống, có sẵn cho tất cả người dùng trên hệ thống. Bất cứ khi nào người dùng khởi động ứng dụng, trình thông dịch Python có thể đọc các .py
tệp, nhưng nó không thể ghi vào các thư mục (ví dụ /usr/lib/python2.7/dist-packages/
). Đây là một phần của bảo mật chung trong tất cả các hệ thống Linux; Người dùng không nên viết thư /usr
, chỉ với quyền root, điều này là có thể. Vì lý do này, các móc APT sẽ biên dịch các tệp Python cho bạn khi cài đặt; trước hết là để giảm thiểu kích thước gói, thứ hai là có thể sắp xếp lại các hook một khi có gì đó thay đổi trên hệ thống của bạn về Python, vì nó bắt buộc phải biên dịch lại khi chúng không tương thích trong quá trình nâng cấp.
Tuy nhiên, điều này sẽ không ảnh hưởng đến các tệp python do người dùng sở hữu thường xuyên được biên dịch trong thời gian chạy.
/usr/lib/python2.7/dist-packages/numpy
- có pyc
tập tin. Tôi nhớ tôi đã xem ở đó trên các cài đặt thứ bảy - và chỉ có các tệp py đơn giản. Vì vậy, tôi sắp xếp "không thể tái tạo lỗi".
.pyc
sẽ không có ở đó là gói chưa được cài đặt hoàn chỉnh. Sau khi giải nén có các bước khác để thực hiện. IIRC hook trung tâm python chỉ được chạy sau khi tất cả các gói được cài đặt. Vì vậy, trong phiên APT đang chạy hoặc bị gián đoạn cài đặt gói, quan sát bạn mô tả có thể được thực hiện.
/usr/share/pyshared/
ghi lại cho chính mình - để cho phép python biên dịch các tệp trong lần chạy đầu tiên.