2010-05-09 23 views
21

Tôi duy trì một vài gói Python. Tôi có một tập tin setup.py rất giống nhau cho mỗi người trong số họ. Tuy nhiên, khi thực hiện setup.py install, một trong các gói của tôi được cài đặt dưới dạng trứng, trong khi các gói khác được cài đặt dưới dạng "thư mục trứng", tức là các thư mục có phần mở rộng là "trứng".Python: Tại sao một số gói được cài đặt như trứng và một số là "thư mục trứng"?

Sự khác nhau giữa chúng gây ra hành vi khác nhau này là gì?

+0

(Tôi đang sử dụng Windows XP.) –

Trả lời

22

:

Nếu zip-safe tồn tại, nó có nghĩa là dự án sẽ hoạt động bình thường khi cài đặt như một zipfile .egg, và ngược lại sự tồn tại của not-zip-safe nghĩa dự án không nên được cài đặt như một tập tin .egg [tức . dưới dạng một thư mục .egg]. Tùy chọn zip_safe để thiết lập công cụ 'setup() xác định tệp nào sẽ được ghi. Nếu tùy chọn không được cung cấp, các công cụ thiết lập sẽ cố gắng tự đánh giá xem gói có thể hoạt động hay không, dựa trên phân tích mã và nội dung.

+7

Điều gì làm cho dự án an toàn với zip? Tại sao bạn chọn cái này hay cái kia? (Tôi yêu cầu ai đó đóng gói một dự án.) –

+2

Từ tài liệu về setuptools: http://peak.telecommunity.com/DevCenter/setuptools#setting-the-zip-safe-flag – saffsd

4

Một tệp trứng thực tế là kho lưu trữ zip có cấu trúc thư mục cụ thể bên trong. Theo tài liệu zipimport, chỉ có thể nhập .py, .pyc.pyo tệp từ tệp zip. Vì vậy, nếu gói cần nhập các loại tài nguyên mô-đun khác (như mã c đã biên dịch; .so tệp, .pyd tệp), nó sẽ không hoạt động dưới dạng tệp zip.

Tôi không biết đây có phải là chỉ lý do một số trứng không hoạt động như lưu trữ zip, nhưng tôi nghĩ đó là lý do chính.

+0

Đó không phải là lý do chính. Nó thậm chí không phải là một lý do * chính xác *. setuptools thêm bộ nạp đặc biệt để tạo các tệp .so và .pyd hoạt động ngay cả với một quả trứng nén. Câu trả lời khác là câu trả lời đúng. –

Các vấn đề liên quan