Tôi có một thư viện python với cấu trúc kho sau:Sử dụng py.test với mã thư viện biên soạn
repobase
|- mylibrary
| |- __init__.py
|- tests
|- test_mylibrary.py
Đến nay, chạy các bài kiểm tra có thể chỉ đơn giản được thực hiện bằng cách gọi py.test
trong thư mục repobase. import mylibrary
trong test_mylibrary.py sau đó sử dụng mã cục bộ trong repobase/mylibrary.
Bây giờ, tôi đã mở rộng thư viện để sử dụng mã được biên dịch. Do đó mã nguồn tại repobase/mylibrary không hoạt động theo cách riêng của nó. Tôi phải làm setup.py build
. Điều này tạo ra repobase/build/lib.linux-x86_64-2.7/mylibrary.
Có cách nào hợp lý để sử dụng py.test thư mục này để nhập thư viện của tôi không? Với những hạn chế:
Tôi không muốn bao gồm bất kỳ ma thuật
sys.path
/nhập khẩu test_mylibrary.py vì điều này có thể phá vỡ các xét nghiệm trong envrionments khác.Tôi không muốn từ bỏ khả năng chạy
py.test
từ repobase. Do đó việc sửa đổi PYTHONPATH không giúp ích gì vì.
vẫn sẽ là số đầu tiên trong sốsys.path
. Và do đó, repobase/mylibrary sẽ được ưu tiên hơn repobase/build/lib.linux-x86_64-2.7/mylibrary.
Nếu không, cách chuẩn để thử nghiệm thư viện python cần xây dựng là gì?
Không rõ ý bạn là gì ... "Tôi đã mở rộng thư viện để sử dụng mã được biên dịch ...", tức là phiên bản được biên dịch cung cấp giao diện giống như phiên bản Python hoặc phiên bản Python 'nhập 'phiên bản đã biên dịch? Nếu trước đây, sau đó bạn đang thử nghiệm hiệu quả hai thứ khác nhau, vì vậy có lẽ họ nên có tên khác nhau, ngay cả khi bộ thử nghiệm là giống hệt nhau, q.v. 'Pickle' của Python so với' cPickle'. Nếu sau này, họ chắc chắn sẽ có tên khác nhau. Một thành ngữ Python phổ biến là cho phần được biên dịch được thêm vào trước với dấu gạch dưới, q.v. 'Socket' so với' _socket' của Python. – Aya
(tiếp theo) Dù bằng cách nào, có hai cách triển khai mô-đun khác nhau chia sẻ cùng tên là yêu cầu sự cố. Ngay cả khi giải pháp của bạn hoạt động cho tất cả các trường hợp có thể chạy trong ngày hôm nay, bạn không thể dự đoán tất cả các trường hợp thời gian chạy trong tương lai và bạn có thể sẽ nhập hoặc kiểm tra phiên bản sai mà không nhận ra nó. – Aya
@Aya Tôi vừa mới triển khai. Mã được biên dịch * thay thế * một số mã python trước đây. Như tôi đã viết "Vì vậy, mã nguồn tại repobase/mylibrary không phải là chức năng của riêng mình." Tôi cần mã được biên dịch để có thể chạy thử nghiệm. –