2009-11-18 32 views

Trả lời

33

Phương pháp tôi thường sử dụng là để ghi đè các lệnh trong câu hỏi:

from distutils.command.install import install as DistutilsInstall 

class MyInstall(DistutilsInstall): 
    def run(self): 
     do_pre_install_stuff() 
     DistutilsInstall.run(self) 
     do_post_install_stuff() 

... 

setup(..., cmdclass={'install': MyInstall}, ...) 

này mất tôi khá lâu để tìm ra từ tài liệu và nguồn tài liệu distutils, vì vậy tôi hy vọng nó sẽ giúp bạn giảm đau.

Lưu ý: bạn cũng có thể sử dụng thông số cmdclass này để thêm lệnh mới.

+1

Cảm ơn câu trả lời. Tiết kiệm cho tôi nỗi đau? Sắp xếp, tôi đã dành quá nhiều thời gian để tìm câu trả lời này ... –

+6

sau khi đọc câu trả lời này tôi đã thực hiện một cái gì đó tương tự và nó hoạt động khá tốt (https://github.com/Turbo87/py-xcsoar/blob /master/setup.py). mã chạy một Makefile tạo hai tệp thi hành và setup.py được sửa đổi, sau đó thậm chí cài đặt các tệp thi hành này vào hệ thống. cũng có thể cài đặt bất kỳ loại thư viện nào. – TBieniek

+0

Lưu ý rằng điều này dường như không hoạt động tốt với pip, tuy nhiên nếu bạn thay đổi 'distutils.command.install' thành' setuptools.command.install', lấy từ http://stackoverflow.com/questions/15853058/ run-custom-task-when-call-pip-install – wxs

1

Nếu bạn đang xây dựng một phần mở rộng python bạn có thể sử dụng phần mở rộng distutils/setuptools. Ví dụ:

from setuptools import Extension 
# or: 
# from distutils.extension import Extension 
setup(... 
     ext_modules = [Extension("pkg.icu", 
           ["icu-sqlite/icu.c"]), 
        ] 
    ) 

Có nhiều lựa chọn để xây dựng mở rộng, xem các tài liệu: http://docs.python.org/distutils/setupscript.html

+0

Đây không phải là tiện ích mở rộng mà tôi muốn xây dựng mà chỉ là thư viện C không được liên kết với Python. (Đó là một phần mở rộng cho sqlite.) –

0

Có thể xây dựng thư viện C với các dấu ngắt (xem tham số thư viện của distutils.core.setup), nhưng bạn có thể phải sao chép các tùy chọn đã có trong Makefile, do đó, điều dễ nhất để làm là có thể mở rộng lệnh cài đặt như được giải thích trong các trả lời khác và gọi thực hiện với mô-đun subprocess.

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