2009-11-30 26 views
10

Chiến lược cấu trúc thư mục tốt nhất để chia sẻ một mô-đun tiện ích trên các dự án python của tôi là gì? Vì các module phổ biến sẽ được cập nhật với các hàm mới, tôi sẽ không muốn đặt chúng trong thư mục cài đặt python.Chia sẻ các mô-đun tiện ích trên các dự án python

project1/ 
project2/ 
sharedUtils/ 

Từ project1 Tôi không thể sử dụng "import .. \ sharedUtils", có cách nào khác không? Tôi không muốn mã hóa địa điểm "sharedUtils"

Cảm ơn trước

Trả lời

6

Tạo gói riêng độc lập? Và đặt nó trong/trang web-gói cài đặt python của bạn?

Ngoài ra còn có sở thích cá nhân của tôi khi nói đến chế độ phát triển: sử dụng các liên kết tượng trưng và/hoặc *.pth tệp.

+3

Thú vị sử dụng dấu hỏi ... – tgray

+1

Vì có nhiều khả năng ... Tôi sử dụng "phương pháp tiếp cận Socrates": cố gắng làm cho mọi người phản ánh về các khả năng. – jldupont

+2

Làm thế nào để bạn đối phó với kiểm soát sửa đổi theo cách này? Khi bạn cam kết dự án của bạn, bạn cũng đi theo cách thủ công đến thư mục site-packages và làm tương tự không? –

5

Giả sử bạn có sharedUtils/utils_foosharedUtils/utils_bar. Bạn có thể chỉnh sửa PYTHONPATH bạn để bao gồm sharedUtils, sau đó nhập chúng trong project1project2 sử dụng

import utils_foo 
import utils_bar 
etc. 

Trong linux bạn có thể làm điều đó được chỉnh sửa ~/.profile với một cái gì đó như thế này:

PYTHONPATH=/path/to/sharedUtils:/other/paths 
export PYTHONPATH 

Sử dụng biến môi trường PYTHONPATH ảnh hưởng đến các thư mục mà python tìm kiếm khi tìm kiếm các mô-đun. Vì mỗi người dùng có thể thiết lập PYTHONPATH của riêng mình, giải pháp này là tốt cho các dự án cá nhân.

Nếu bạn muốn tất cả người dùng trên máy có thể nhập mô-đun trong sharedUtils, thì bạn có thể đạt được điều này bằng cách sử dụng tệp .pth. Chính xác nơi bạn đặt tệp .pth có thể phụ thuộc vào phân phối python của bạn. Xem http://bob.pythonmac.org/archives/2005/02/06/using-pth-files-for-python-development/

+0

Xin lỗi nhưng mới với python, bạn sẽ mã cứng đường dẫn đầy đủ trong PYTHONPATH hoặc sử dụng "../"? –

+0

@iKarampa, không sao cả. PYTHONPATH yêu cầu một đường dẫn đầy đủ (tuyệt đối). – unutbu

+0

Khi bạn phân phối tệp của mình, bạn cần bằng cách nào đó để ghép tất cả các utils trong một thư mục và nhập tiêu chuẩn sẽ hoạt động như bình thường. OK đã nhận nó! Cảm ơn –

4

Cấu trúc thư mục:

project1/foo.py 
sharedUtils/bar.py 

Với các thư mục như bạn đã thể hiện chúng, từ foo.py bên trong thư mục project1 bạn có thể thêm đường dẫn tương đối để sharedUtils như sau:

import sys 
sys.path.append("../sharedUtils") 
import bar 

Điều này tránh mã hóa cứng đường dẫn C:/../sharedUtils và sẽ hoạt động miễn là bạn không thay đổi cấu trúc thư mục.

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