2017-02-14 24 views
7

Cách hiệu quả nhất để liệt kê tất cả các phụ thuộc cần thiết để triển khai một dự án làm việc ở nơi nào khác (trên một hệ điều hành khác)?Liệt kê các phụ thuộc trong Python

Python 2.7, môi trường Windows dev, không sử dụng virtualenv cho mỗi dự án, nhưng môi trường dev toàn cầu, cài đặt thư viện khi cần, vui vẻ nhảy từ dự án này sang dự án tiếp theo.

Tôi đã theo dõi nhiều nhất (không chắc chắn tất cả) thư viện mà tôi đã cài đặt cho một dự án cụ thể. Tôi có không theo dõi bất kỳ phụ thuộc phụ nào được cài đặt tự động với chúng. Làm pip freeze liệt kê cả hai, cộng với tất cả các thư viện khác đã từng được cài đặt.

Có cách nào để liệt kê những gì bạn cần cài đặt, không hơn, không kém, để triển khai dự án?

Lưu ý: không thể tưởng tượng không có Q + A về điều này, nhưng tôi không thể tìm thấy nó.

EDIT Khi xem các câu trả lời bên dưới, một số làm rõ. Dự án của tôi bao gồm một loạt các mô-đun (mà tôi đã viết), mỗi mô-đun có một bó là import s. Tôi có nên sao chép tất cả các mục nhập từ tất cả các mô-đun vào một tệp, sắp xếp loại bỏ các bản sao và ném tất cả từ thư viện chuẩn (và làm cách nào để biết chúng là)? đây có phải là cách tốt hơn không? Đó là câu hỏi.

Trả lời

5

Quét báo cáo import của bạn. Rất có thể bạn chỉ nhập những thứ bạn muốn nhập khẩu một cách rõ ràng, chứ không phải các phụ thuộc.

Tạo danh sách như danh sách pip freeze, sau đó tạo và kích hoạt virtualenv.

Làm pip install -r your_list và cố gắng chạy mã của bạn trong virtualenv đó. Lưu ý bất kỳ trường hợp ngoại lệ nào ImportError, kết hợp chúng với các gói và thêm vào danh sách của bạn. Lặp lại cho đến khi mã của bạn chạy mà không có sự cố.

Bây giờ bạn có danh sách để cấp cho pip install trên trang web triển khai của bạn.

Điều này cực kỳ thủ công, nhưng không yêu cầu phải có công cụ bên ngoài và buộc bạn phải đảm bảo rằng mã của bạn chạy. (Chạy bộ kiểm tra của bạn như một kiểm tra là tuyệt vời nhưng không đủ.)

+0

Câu trả lời này là đúng, và tốt đẹp ở chỗ nó không phụ thuộc vào bất kỳ công cụ. Kiểm tra một số câu trả lời khác cho các cách để quét tự động nhập của bạn. – nighthawk454

+0

@ nighthawk454: Cảm ơn bạn. Tôi đã upvoted những câu trả lời khác. – 9000

1

Cách để làm điều này là phân tích nhập khẩu của bạn. Để tự động hóa, hãy xem Snakefood. Sau đó, bạn có thể tạo một tệp requirements.txt và tiếp tục sử dụng virtualenv.

Sau đây sẽ liệt kê các phụ thuộc, bao gồm các module từ thư viện tiêu chuẩn:

sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files 

câu hỏi liên quan:

Get a list of python packages used by a Django Project

list python package dependencies without loading them?

+1

Snakefood chỉ tạo biểu đồ phụ thuộc. Làm thế nào để bạn đề xuất để loại trừ các phụ thuộc kiểm tra và phụ thuộc-of-phụ thuộc? – wim

12

pipreqs giải quyết vấn đề. Nó tạo ra cấp dự án tệp requirements.txt.

Install pipreqs: pip install pipreqs

  1. Tạo tập tin requirement.txt dự án cấp: pipreqs/path/to/your/dự án/
  2. yêu cầu tập tin sẽ được lưu trong/path/to/your/dự án /requirements.txt

Nếu bạn muốn đọc thuận lợi hơn của pipreqs qua pip freeze, đọc nó from here

+1

@Downvoter xin vui lòng để lại tin nhắn, tôi sẽ cải thiện câu trả lời của tôi. – haifzhan

+0

Tôi không biết tại sao, 3 câu trả lời của trang này đã được bình chọn, nhưng downvoter đã không để lại bất kỳ bình luận – haifzhan

+0

Tôi downvoted nó. Và tôi sẽ downvote bất kỳ câu trả lời cho thấy làm thế nào để tạo ra một tập tin 'requirements.txt' bởi vì họ là tất cả hack, tập tin này phục vụ một mục đích khác nhau. Tệp này không được sử dụng trong triển khai - đó là những gì 'setup.py' là dành cho. – wim

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