2012-05-05 29 views
12

Tôi muốn tạo một setup.py sẽ cài đặt các tệp của tôi vào các thư mục tùy chỉnh. Tôi có một tiền tố nhất định, mà tôi muốn để có được những kết quả sau:python setup.py cấu hình để cài đặt các tệp trong thư mục tùy chỉnh

/my/prefix/ 
    bin/ 
    script.sh 
    libexec/ 
    one.py 
    two.py 
    ... 
    lib/pythonX.Y/site-packages/ 
    package/... 

dự án ban đầu của tôi là như sau:

/ 
    script.sh 
    one.py 
    two.py 
    ... 
    setup.py 
    package/... 
    __init__.py 
    ... 

Điều gì sẽ là cách tốt nhất để đạt được điều đó? Tôi muốn để có thể cài đặt nó sau đó với một cái gì đó như:

python setup.py install --prefix=/my/prefix 

tôi có thể nhận được "gói" độc đáo được cài đặt trong thư mục đúng như lib/pythonX.Y/site-packages dưới mặc định là --prefix vị trí. Nhưng là có một cách sạch sẽ để có được script.sh vào "bin" và các tập tin python khác vào "libexec"? Cách duy nhất tôi thấy để đạt được điều đó sẽ là sao chép thủ công các tệp đó trong tập lệnh setup.py của tôi. Có thể có một cách sạch hơn và tiêu chuẩn hơn để làm điều đó?

(chỉnh sửa)

Giải pháp

tôi đã kết thúc với setup.py như thế:

setup(name='mylib', 
    scripts=['script.sh'], 
    data_files=[('libexec', ['one.py', 'two.py'])] 
) 

Tất nhiên, bạn có thể duyệt qua tất cả các file python cho libexec, nhưng tôi chỉ có 2-3 tệp python mà tôi cần ở đó.

(edit2)

Ngoài ra, tôi có thể đã setup.cfg như sau:

[install] 
prefix=/my/prefix 

và thay vì python setup.py install --prefix=/my/prefix Tôi chỉ có thể làm:

python setup.py install 
+0

Có một số tài liệu hữu ích về vấn đề này tại đây: https://docs.python.org/2/install/index.html#alternate-installation-unix-the-prefix-scheme và tại đây https: //docs.python. org/3/distutils/introduction.html – Pierz

Trả lời

8

Các kịch bản được xử lý bằng cách sử dụng tham số scripts cho hàm thiết lập. Đối với libexec, bạn có thể xem chúng dưới dạng tệp dữ liệu và sử dụng tùy chọn dữ liệu.

setup(... 
    scripts=glob("bin/*"), 
    data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))], 
    ... 
) 

Tôi không chắc chắn cách thức này sẽ hoạt động với tùy chọn --prefix, tôi chưa bao giờ thử điều đó.

+0

Cảm ơn! data_files đã làm cho tôi. Một câu hỏi khác, tôi có thể có "tiền tố" mặc định không? Nếu người dùng không chỉ định một, tôi muốn sử dụng của riêng tôi (thay vì mặc định python). – Ago

+1

Bạn có thể đặt các tùy chọn mặc định trong tệp setup.cfg. Nó nằm trong tệp tùy chọn kiểu .ini với các phần và cặp tên-giá trị. Các tùy chọn dòng lệnh chuyển trực tiếp sang các tùy chọn ở đó (xóa '--', v.v.). – Keith

+0

hoạt động như một sự quyến rũ, cảm ơn! – Ago

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