Trên khuôn mặt của nó, nó dường như đó requirements.txt
và setup.py
là bản sao ngớ ngẩn, nhưng điều quan trọng là phải hiểu rằng trong khi các hình thức tương tự, chức năng dự định là rất khác nhau.
Mục tiêu của một tác giả gói, khi chỉ định các phụ thuộc, là nói "bất cứ nơi nào bạn cài đặt gói này, đây là các gói khác bạn cần, để gói này hoạt động."
Ngược lại, tác giả triển khai (có thể là cùng một người vào một thời điểm khác nhau) có một công việc khác, trong đó họ nói "đây là danh sách các gói chúng tôi đã tập hợp lại và thử nghiệm và bây giờ tôi cần cài đặt".
Tác giả gói viết cho nhiều tình huống khác nhau, bởi vì họ đang đưa tác phẩm của mình ra ngoài để sử dụng theo những cách họ có thể không biết và không có cách nào biết gói nào sẽ được cài đặt cùng với gói của họ. Để trở thành hàng xóm tốt và tránh xung đột phiên bản phụ thuộc với các gói khác, họ cần chỉ định phạm vi phiên bản phụ thuộc càng rộng càng tốt. Đây là những gì install_requires
trong setup.py
làm.
Tác giả triển khai viết cho một mục tiêu rất khác, rất cụ thể: một phiên bản duy nhất của một ứng dụng hoặc dịch vụ được cài đặt, được cài đặt trên một máy tính cụ thể. Để kiểm soát chính xác việc triển khai và chắc chắn rằng các gói phù hợp đã được kiểm tra và triển khai, tác giả triển khai phải chỉ định phiên bản chính xác và vị trí nguồn của mỗi gói sẽ được cài đặt, bao gồm cả phụ thuộc và phụ thuộc. Với thông số kỹ thuật này, việc triển khai có thể được áp dụng lặp lại cho một số máy hoặc được thử nghiệm trên máy thử nghiệm và tác giả triển khai có thể tự tin rằng các gói tương tự được triển khai mỗi lần. Đây là những gì a requirements.txt
làm.
Vì vậy, bạn có thể thấy rằng, trong khi cả hai đều trông giống như một danh sách lớn các gói và phiên bản, hai thứ này có công việc rất khác nhau. Và thật dễ dàng để trộn nó lên và hiểu sai! Nhưng cách đúng đắn để suy nghĩ về điều này là requirements.txt
"câu trả lời" cho "câu hỏi" được đặt ra bởi các yêu cầu trong tất cả các setup.py
tệp gói khác nhau . Thay vì viết nó bằng tay, nó thường được tạo bằng cách yêu cầu pip xem tất cả các setup.py
tệp trong một tập các gói mong muốn, tìm một tập các gói mà nó cho là phù hợp với tất cả các yêu cầu, và sau đó, sau khi chúng được cài đặt, "đóng băng "Danh sách các gói đó thành một tệp văn bản (đây là pip freeze
tên của nguồn gốc).
Vì vậy, các takeaway:
setup.py
nên khai báo các phiên bản phụ thuộc lỏng lẻo nhất có thể vẫn hoạt động được. Công việc của nó là nói những gì một gói cụ thể có thể làm việc với.
requirements.txt
là một bảng kê khai triển khai xác định toàn bộ công việc cài đặt và không nên được coi là gắn liền với bất kỳ một gói nào. Công việc của nó là khai báo một danh sách đầy đủ tất cả các gói cần thiết để thực hiện công việc triển khai.
- Bởi vì hai điều này có nội dung và lý do khác nhau như vậy, nên việc sao chép cái này sang cái kia là không khả thi.
Người giới thiệu:
install_requires
được sử dụng để khai báo các phụ thuộc vào các gói được yêu cầu để gói hoạt động và được nhà phát triển góirequirements.txt
sử dụng , trong khi được sử dụng để tự động cài đặt các môi trường, cho phép cài đặt phần mềm bổ sung và thực hiện ghim phiên bản và được sử dụng bởi các sysadins triển khai gói. Vai trò và đối tượng mục tiêu của họ khác nhau đáng kể, vì vậy cố gắng kết hợp chúng như mong muốn của OP là một lỗi thiết kế chính hãng.