2009-12-14 22 views
6

Chúng tôi có một cài đặt python phổ biến cho tất cả các hệ thống của chúng tôi để đảm bảo mọi hệ thống có cài đặt python giống nhau và để giảm bớt các vấn đề về cấu hình. Cài đặt này nằm trên một ổ đĩa được chia sẻ. Chúng tôi cũng có nhiều nền tảng chia sẻ cài đặt này. Chúng tôi nhận được xung đột các tệp nền tảng cụ thể xung đột bằng cách đặt tùy chọn cấu hình --exec-prefix khi biên dịch python.Tôi có thể xử lý trứng trăn cho nhiều nền tảng ở một địa điểm như thế nào?

Vấn đề của tôi là bây giờ tôi muốn cài đặt trứng bằng easy_install (hoặc cách khác) phụ thuộc vào nền tảng. easy_install đặt trứng vào thư mục site-package của phần không phụ thuộc vào nền tảng của tiến trình cài đặt. Tên của quả trứng có nền tảng trong nó nên không có xung đột. Nhưng python sẽ chỉ tải cái đầu tiên mà nó tìm thấy. (Vì vậy, trên Solaris nó có thể cố gắng tải trứng Linux). Sửa đổi tập tin easy-install.pth có thể thay đổi cái mà nó tìm thấy, nhưng điều đó khá vô dụng.

Tôi có thể di chuyển tệp .egg vào thư mục gói nền tảng phụ thuộc và sau đó sử dụng pkg_resources.require() để tải chúng (hoặc điều chỉnh theo cách thủ công đường dẫn). Nhưng có vẻ như tôi không cần phải kể từ khi nền tảng là trong tên của quả trứng.

Có cách nào chung chung hơn tôi có thể đảm bảo rằng trăn sẽ tải trứng cho nền tảng chính xác không?

+0

Trứng có chứa phần mở rộng C hay là python nguyên chất không? – codeape

+0

Vâng, có một phần mở rộng C. Nếu không nó sẽ không quan trọng bởi vì mã sẽ không phụ thuộc vào nền tảng. Cụ thể, đó là mô-đun PyPerforce, trong trường hợp bạn tò mò. – Philbert

Trả lời

2

Điều tôi đã kết thúc bằng cách di chuyển quả trứng phụ thuộc vào nền tảng vào thư mục gói trang web cụ thể theo nền tảng (như được chỉ định tại http://docs.python.org/install/index.html). Sau đó, tôi đã thực hiện một install.pth dễ dàng trong cùng thư mục đó, liệt kê những quả trứng được cài đặt.

Điều này sẽ thuận tiện hơn nhiều nếu easy_install tôn vinh exec_prefix và đặt trứng phụ thuộc vào nền tảng vào vị trí "phân phối mô-đun không thuần túy" chính xác. Có lẽ tôi sẽ yêu cầu điều này từ các folks easy_install.

1

Python có đủ móc để làm điều này có thể nhưng có lẽ không khôn ngoan. Nếu bạn thực sự muốn thực hiện điều này, hãy xem PEP 302 và bắt đầu tấn công trên mã nguồn easy_install hoặc distribute. Như bạn đã biết, không có bất kỳ logic nào trong easy-install.pth.

Bạn có thể sẽ tốt hơn rất nhiều chỉ đơn giản là theo dõi các gói Python bạn muốn cài đặt. Ví dụ, bạn có thể viết gói Python của riêng mình mà chỉ phụ thuộc vào tập hợp mong muốn.

+0

Và/Hoặc sử dụng gói virtualenv python để quản lý các gói của bạn chỉ cho dự án đó – RyanWilcox

2

Hãy thử virtualenv ... http://pypi.python.org/pypi/virtualenv ... giúp bạn tạo môi trường riêng biệt với thư mục python + site_packages của thư mục riêng của nó. Vì vậy, bạn không bao giờ có bất kỳ xung đột với các gói được cài đặt trong đường dẫn địa phương nói.

0

Sử dụng "easy_install -m" để cài đặt tất cả các gói dành riêng cho nền tảng, do đó không có phiên bản mặc định trên sys.path. Bằng cách đó, độ phân giải phiên bản diễn ra trong thời gian chạy và thông tin nền tảng sẽ được xem xét.

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