2012-12-18 21 views
21

Tôi có thư viện python. Thật không may tôi đã không cập nhật nó để làm việc với python 3 được nêu ra.setup.py: hạn chế phiên bản cho phép của trình thông dịch python

trong setup.py của nó, tôi đã thêm

install_requires=['python<3'], 

Mục đích của tôi là để không cho phép gói này phải được cài đặt/sử dụng theo python 3, bởi vì tôi biết nó không (chưa) làm việc. Tôi không nghĩ rằng đây là cách đúng để làm điều đó, bởi vì pip sau đó cố gắng để tải về và cài đặt python 2.7.3 (mà đã là phiên bản cài đặt!).

Tôi nên chỉ định phụ thuộc thư viện của mình trên một loạt phiên bản trình thông dịch python cụ thể như thế nào? Tôi có nên thêm thẻ Programming Language :: Python :: 2 :: Only không? Điều này thực sự sẽ ngăn chặn cài đặt theo python 3? Điều gì xảy ra nếu tôi cũng muốn hạn chế phiên bản tối thiểu thành python 2.6?

Tôi muốn một giải pháp hoạt động ở mọi nơi, nhưng sẽ giải quyết cho một giải pháp chỉ hoạt động trong pip (và hy vọng không gây ra easy_install bị nghẹt thở).

+0

Đã trả lời ở đây: http://stackoverflow.com/questions/13385337/distribute-distutils-specify-python-version – shakefu

Trả lời

10

Tính đến version 9.0.1 pip sẽ tôn vinh một python_requires chuỗi mới, xác định phiên bản python để cài đặt, ví dụ:

setup(
    ..., 
    python_requires=">=3.3" 
) 

Xem here để biết thêm chi tiết. Xem thêm điều này answer trên SO.

15

một giải pháp khả thi là để kiểm tra cho phiên bản python, vì pip không có thể đáp ứng phiên bản python trừ phiên bản nó hiện đang chạy trong (nó cài đặt trong môi trường python hiện hành):

import sys 
if not sys.version_info[0] == 2: 
    sys.exit("Sorry, Python 3 is not supported (yet)") 

setup(... 
+2

Đúng, điều đó sẽ hiệu quả. Nó sẽ được đẹp hơn nhiều để có một cái gì đó được xây dựng vào các phụ thuộc mặc dù, do đó, pip sẽ biết lên phía trước không bận tâm tải về và chạy trình cài đặt. – gfxmonk

+0

Tại sao không phải cả hai? Câu trả lời của bạn là những gì người ta nên * không * làm mà là dựa vào các tính năng dựng sẵn, mặc dù sử dụng câu trả lời này * bổ sung * vào 'python_requires' sẽ là tuyệt vời! Bạn có thể cập nhật điều đó? – Mayou36

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