2015-04-25 20 views
9

Tôi đã thực hiện dự án của mình với setuptools và tôi muốn thử nghiệm nó với tox. Tôi liệt kê các phụ thuộc trong một biến và được thêm vào tham số setup() (tests_requireextras_require). Dự án của tôi cần cài đặt tất cả các phụ thuộc được liệt kê trong tests_require để kiểm tra nhưng pip install không cài đặt chúng.pip cài đặt kiểm tra phụ thuộc cho độc tố từ setup.py

tôi đã cố gắng này, nhưng nó đã không làm việc:

install_command = pip install {opts} {packages}[tests] 

Làm thế nào tôi có thể cài đặt phụ thuộc kiểm tra mà không cần phải quản lý nhiều danh sách phụ thuộc (ví dụ: Có tất cả phụ thuộc được liệt kê trong cả hai test_requirements.txttests_require biến)?

+1

Tôi không chắc chắn nếu bạn có thể - tất cả các dự án tôi đã nhìn thấy với tích hợp 'độc tố' chỉ có một tập tin yêu cầu kiểm tra cụ thể và đặt' deps = -r whatever_file.txt' trong 'tox.ini'. – jonrsharpe

+0

@jonrsharpe chỉ tôi muốn làm cho không có tập tin văn bản deps. Nếu tôi thực hiện nó, tôi phải quản lý hai danh sách deps. – item4

+0

Vâng, tôi hiểu tại sao bạn không muốn làm điều đó, và tôi nói với bạn rằng * Tôi không chắc chắn bạn có thể tránh nó *. Tùy chọn khác là đọc các phụ thuộc thử nghiệm của bạn từ tệp trong 'setup.py' thay vì mã hóa chúng; sẽ đưa bạn trở lại danh sách DRY duy nhất. – jonrsharpe

Trả lời

1

Những gì bạn có thể làm là có một tập tin duy nhất (gọi là test_requirements.txt) và liệt kê những phụ thuộc kiểm tra như sau:

dnspython==1.12.0 
easydev==0.8.3 
enum34==1.0.4 
fabric==1.10.1 
... 

Sau đó, trong setup.py, phân tích và lưu trữ các nội dung tập tin trong một danh sách và thông qua đó danh sách công việc setup:

tests_require = [line.strip() for line in 
       open('test_requirements.txt') 
       if line.strip() and not line.strip().startswith('--')] 

setuptools.setup(
    ... 
    tests_require=tests_require, 
    ... 
) 
12

tôi đã đạt được điều này bằng cách cam kết một sự lạm dụng nhẹ extra requirements. Bạn gần như đã thử cú pháp bổ sung, chỉ cần tests_require số lần hiển thị không tự động có sẵn theo cách đó.

Với setup.py như thế này:

from setuptools import setup 

test_deps = [ 
    'coverage', 
    'pytest', 
] 
extras = { 
    'test': test_deps, 
} 

setup(
    # Other metadata... 
    tests_require=test_deps, 
    extras_require=extras, 
) 

Bạn có thể sau đó được sự phụ thuộc kiểm tra cài đặt với các cú pháp extras, ví dụ từ thư mục gốc của dự án:

$ pip install .[test] 

Cho rằng cú pháp tương tự để Tox trong tox.ini, không cần phải điều chỉnh mặc định install_command:

[testenv] 
commands = {posargs:pytest} 
deps = .[test] 

Bây giờ bạn không cần phải duy trì danh sách phụ thuộc vào hai các địa điểm và chúng được thể hiện ở nơi chúng cần cho gói được xuất bản: trong siêu dữ liệu đóng gói thay vì các tệp requirements.txt.

Có vẻ như tính năng bổ sung nhỏ này hack is not all that uncommon.

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