Tôi đang cố gắng thực hiện một số chức năng từ thư viện chia sẻ C++ lớn (libbig.so) và hiển thị chúng bằng Python qua Cython. Để làm như vậy, tôi đã có một tệp C++ nhỏ (small.cpp) cung cấp một trình bao bọc mỏng xung quanh chức năng từ thư viện được chia sẻ mà tôi cần, theo cách giúp dễ dàng gọi qua Cython (pysmall.pyx).Phân phối thư viện được chia sẻ và một số mã C với mô-đun mở rộng Cython
libbig.so -> small.cpp, small.h -> libsmall.so -> pysmall.pyx -> pysmall.cpp -> pysmall.so
tôi có thể xây dựng và chạy mô-đun tiện ích này trên của tôi máy tính của riêng tôi: Tôi chỉ biên dịch small.cpp thành libsmall.so và sau đó nói "libraries = ['small']" trong đối tượng Extension trong setup.py để xây dựng mô-đun mở rộng pysmall.so.
Tôi đang cố gắng phân phối mô-đun mở rộng này và tôi đang gặp khó khăn trong việc theo dõi tài nguyên mô tả các phương pháp hay nhất về phân phối mô-đun Cython cũng như nguồn C và thư viện được chia sẻ. Tôi đã đọc qua "Installing Python Modules", "Distributing Python Modules" và "Distributing Cython Modules". Tôi hiểu cách tự phân phối mô-đun mở rộng. Tôi ít chắc chắn về cách tốt nhất để phân phối phụ thuộc của mô-đun mở rộng.
Tài liệu Cython cho biết bạn nên bao gồm tệp .cpp được tạo cũng như tệp .pyx, trong trường hợp Cython không có, nhưng nó không cung cấp mã để minh họa cách xử lý tốt nhất từng tình huống. Nó cũng không đề cập đến cách phân phối các thư viện chia sẻ mà trên đó mô-đun Cython phụ thuộc.
Tôi đang tìm hiểu thông qua các tập lệnh setup.py từ gấu trúc, lxml, pyzmq, h5py, v.v. và có khá nhiều công việc không liên quan xảy ra. Nếu bất cứ ai có con trỏ hoặc mã ví dụ có thể đẩy nhanh quá trình này, tôi chắc chắn sẽ đánh giá cao nó!
Xin lưu ý rằng trong các phiên bản 'setuptools' và' distutils' mới hơn (tôi đang sử dụng 'setuptools' 5.7), các lệnh đã được chuyển sang mô-đun riêng của chúng. Vì vậy, bạn sẽ muốn làm 'từ setuptools.command.build_ext nhập build_ext' hoặc từ' distutils' tương ứng. – Midnighter
setup.py đầu tiên của bạn là nó nhập khẩu Cython.Distutils trước khi nó có cơ hội để cài đặt nó nếu nó không có mặt. – zneak
Một tùy chọn khác là tạo một gói conda, có thể được đóng gói 'libbig.so'. https://conda.io/docs/user-guide/tutorials/build-postgis.html – oLas