2010-08-26 15 views
7

Tôi đang tự hỏi về cách thức chính xác/dễ nhất/nhiều nhất về giao dịch với các tiểu dự án mà bạn muốn sử dụng cùng một gói cơ sở. Chúng tôi hiện có một cấu trúc tập tin như thế này:Làm thế nào để quản lý một số tiểu dự án python với setuptools?

trunk\ 
    proj1\setup.py 
      company_name\__init__.py + proj1's code 
    proj2\setup.py 
      company_name\__init__.py + proj2's code 

Chúng tôi muốn giữ COMPANY_NAME namespace chung cho tất cả các dự án của chúng tôi (? Có lẽ đây chính là unpythonic) nhưng khi proj1 và proj2 được cài đặt trong chế độ phát triển, một trong những đầu tiên cài đặt bị hỏng. Có vẻ như import company_name... bị nhầm lẫn với gói company_name nào cần xem và nó lấy gói đầu tiên/cuối cùng/ngẫu nhiên.

Điều này thường được xử lý như thế nào trong một dự án trăn lớn hơn? Có thể giải quyết vấn đề này với một setup.py trong thân cây để xây dựng một số loại mega-trứng không? Tôi đã không tìm thấy bất kỳ thông tin có liên quan trên google hoặc ngăn xếp, vì vậy bất kỳ thông tin ngay cả chỉ liên kết được đánh giá rất nhiều!


chỉnh sửa: Tôi chỉ cố gắng thêm một setup.py trong thư mục gốc với

...  
namespace_packages = ['company_name'], 
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']} 
... 

với thích hợp pkg_resources.declare_namespace(__name__) trong __init_.py file, nhưng ./setup.py bdist_egg chỉ cung cấp cho:

lỗi trong Lệnh thiết lập company_name: Phân phối không chứa mô-đun hoặc gói cho gói không gian tên 'company_name'

Trả lời

6

Trong khi tôi không thể xác minh cho sự trơ trẽn của giải pháp của tôi, cuối cùng tôi đã nhận được các ứng dụng khác nhau chạy cùng nhau. Tôi đã đi đúng hướng với các gói không gian tên, nhưng thay vì cố gắng để có một siêu dự án trong thân cây, tôi đã thêm dòng namespace_packages trong setup.py của từng dự án riêng lẻ. Điều này dẫn đến hành vi đúng cách khi được cài đặt cùng nhau, chia sẻ không gian tên company_name như dự định.

Bất cứ ai muốn kêu vang vào thời điểm này đều là giải pháp trăn hợp lý, tôi vẫn muốn nghe nếu đây là "cách thực hiện". Nó cảm thấy đúng, nhưng đó có thể là vì nó bắt chước phong cách java mà tôi quen thuộc hơn.

+3

Đó là những gì tôi đã thiết kế từ khóa 'namespace_packages' cho, và vì vậy bạn thực sự đã làm đúng cách. –

+0

Công ty của tôi bắt đầu sử dụng các gói không gian tên và nó đã trở thành một sai lầm lớn với rất nhiều chức năng bị hỏng với chúng có sẵn trong các dự án bình thường (chạy thử nghiệm đơn vị, cài đặt bị khó xử, v.v.). Chỉ là một lời cảnh báo. – Lucas