Tôi sử dụng một số phiên bản Python trên máy tính của mình: 2.6.6
, 2.7.6
và 2.7.9
. Khi tôi biên dịch Boost với boost-python, tôi phải cho Python sử dụng trong đối số. Nếu tôi muốn khả năng tương thích, tôi có phải biên dịch Boost cho mỗi phiên bản Python không? (nó khá lớn!) Hoặc là có một cách để sử dụng chỉ có một xây dựng của Boost với một số phiên bản python?Xây dựng Boost với nhiều phiên bản Python
Trả lời
Python development cycle chính thức không mô tả tính ổn định của giao diện nhị phân ứng dụng (ABI) giữa các bản phát hành. Đối với các bản phát hành trước Python 3.2, không có sự đảm bảo nào về khả năng tương thích của ABI. Đối với 3.2 và hơn thế nữa, PEP 384 xác định stable ABI trong đó một tập hợp con của API Python/C được đảm bảo duy trì khả năng tương thích ABI. Để sử dụng tập con này, cần phải xác định Py_LIMITED_API
khi tạo mô-đun Boost.Python và tiện ích mở rộng.
Trong khi nó chủ yếu phụ thuộc vào các loại API Python/C và chức năng được sử dụng trực tiếp trong mã sử dụng hoặc thông qua Boost.Python, nói chung:
- cho phát hành chính cấp, chẳng hạn như Python 2 và Python 3, Boost.Python và mã người dùng sẽ cần phải được biên dịch lại
- cho các bản phát hành cấp độ nhỏ, chẳng hạn như Python 2.6 và Python 2.7, Boost.Python và mã người dùng có thể cần phải được biên dịch lại
- cho các bản phát hành cấp vi mô, Mã Boost.Python và mã người dùng hiếm khi cần biên dịch lại
Trong mọi trường hợp Boost.Python cần được biên dịch lại, không cần phải biên dịch lại thư viện Boost khác. Khi xây dựng nhiều phiên bản của Boost.Python, hãy xác minh việc xây dựng sạch xảy ra. Nếu không có một xây dựng sạch, Boost.Python có thể xây dựng, nhưng không liên kết đúng cách. Ví dụ, biểu tượng PyClass_Type
không nên nhắc đến trong Python 3 Boost.Python xây dựng, nhưng không có một xây dựng sạch, trước xây dựng hiện vật có thể cư trú trong thư viện:
$ ./bootstrap.sh --with-python=/usr/bin/python2
...
Detecting Python version... 2.7
$ ./b2 --with-python --buildid=2 # produces libboost_python-2.so
$ ./bootstrap.sh --with-python=/usr/bin/python3 --with-python-root=/usr
...
Detecting Python version... 3.3
$ ./b2 --with-python --buildid=3noclean # produces libboost_python-3noclean.so
$ ./b2 --with-python --clean
$ ./b2 --with-python --buildid=3 # produces libboost_python-3.so
$ nm -D stage/lib/libboost_python-2.so | grep PyClass_Type
U PyClass_Type
$ nm -D stage/lib/libboost_python-3noclean.so | grep PyClass_Type
U PyClass_Type
$ nm -D stage/lib/libboost_python-3.so | grep PyClass_Type
Lưu ý rằng mặc dù 3noclean
xây dựng được xây dựng với Python 3, xây dựng trước đó đã được sử dụng Python 2 đã có hiện vật mà ô nhiễm thư viện 3noclean
. Ngoài ra, hãy lưu ý rằng Boost.Python và mã người dùng có thể cần được biên dịch lại để phù hợp với kiến trúc CPU của Python và cấu hình unicode UCS-2 hoặc UCS-4.
Cảm ơn câu trả lời này! – Caduchon
- 1. Xây dựng với nhiều phiên bản của trình biên dịch
- 2. Xây dựng Boost trên Windows
- 3. Xây dựng Boost trên Mac với Xcode
- 4. Cách xây dựng nhiều dự án với gradle với nhiều phiên bản jdk?
- 5. Xây dựng Boost với trình biên dịch LSB C++
- 6. thông tin phiên bản xây dựng maven
- 7. Xcode Gettings Phiên bản & Xây dựng Số
- 8. Xây dựng Python với Mingw và gcc
- 9. Xây dựng mở rộng Python với tăng
- 10. Boost biến thể mơ hồ xây dựng
- 11. Lỗi khi xây dựng Boost 1.49.0 với GCC 4.7.0
- 12. Xây dựng các gói Linux cho nhiều bản phân phối và phiên bản
- 13. Cài đặt và xây dựng thư viện Boost trong Linux
- 14. Cài đặt OpenCV cho Python (nhiều phiên bản python)
- 15. VisualStudio: dịch phiên bản xây dựng sang ngày theo lịch
- 16. Bắt phiên bản ở sau xây dựng cho NuGet
- 17. Sử dụng VirtualEnv với nhiều phiên bản Python trên windows
- 18. Phiên bản javac nào đã xây dựng lọ của tôi?
- 19. Xây dựng cả phiên bản devel và phiên bản bình thường của gói RPM
- 20. Xây dựng tất cả các Boost trong một vài phút
- 21. Tìm hiểu phiên bản Go a Binary được xây dựng với?
- 22. Xây dựng với phần xây dựng với Cython
- 23. Đối phó với nhiều phiên bản python khi file python phải sử dụng #/bin/env python
- 24. Lỗi công cụ xây dựng "Vui lòng cài đặt công cụ xây dựng Android phiên bản 19.1.0 trở lên"
- 25. Phiên bản Windows Python và VC++ Phiên bản Redistributable Windows
- 26. Bỏ qua các phiên bản bản địa hóa của cụm từ đầu ra xây dựng
- 27. node-gyp xây dựng cách chỉ định phiên bản nút đích trong khi xây dựng tiện ích mở rộng nút
- 28. SCons xây dựng tùy chỉnh - xây dựng với nhiều file và đầu ra một tập tin
- 29. ggmap Lỗi: GeomRasterAnn được xây dựng với một phiên bản không tương thích của ggproto
- 30. làm thế nào để xây dựng dự án với maven mà không cần phiên bản
Tăng biên dịch cho python 2.7.9 ** nên ** hoạt động đối với tất cả các phiên bản của python từ 2,5 trở lên. Mặc dù, nó sẽ không hoạt động cho python 3. – randomusername