Lưu trữ thư mục virtualenv bên trong git, như bạn đã lưu ý, cho phép bạn triển khai toàn bộ ứng dụng chỉ bằng cách thực hiện một bản sao git (cộng với cài đặt và định cấu hình Apache / mod_wsgi). Một vấn đề tiềm năng quan trọng với cách tiếp cận này là trên Linux, đường dẫn đầy đủ được mã hóa cứng trong kích hoạt của venv, django-admin.py, easy_install và các tập lệnh pip. Điều này có nghĩa là virtualenv của bạn sẽ không hoạt động hoàn toàn nếu bạn muốn sử dụng một đường dẫn khác, có lẽ để chạy nhiều máy chủ ảo trên cùng một máy chủ. Tôi nghĩ rằng trang web thực sự có thể hoạt động với các đường dẫn sai trong các tệp đó, nhưng bạn sẽ gặp vấn đề trong lần tiếp theo bạn cố chạy pip.
Giải pháp, đã được đưa ra, là lưu trữ đủ thông tin trong git để trong quá trình triển khai, bạn có thể tạo virtualenv và thực hiện các cài đặt pip cần thiết. Thông thường mọi người chạy pip freeze
để lấy danh sách sau đó lưu trữ nó trong một tệp có tên là tests.txt. Nó có thể được tải với pip install -r requirements.txt
. RyanBrady đã chỉ ra cách bạn có thể xâu chuỗi các câu lệnh triển khai trong một dòng duy nhất:
# before 15.1.0
virtualenv --no-site-packages --distribute .env &&\
source .env/bin/activate &&\
pip install -r requirements.txt
# after deprecation of some arguments in 15.1.0
virtualenv .env && source .env/bin/activate && pip install -r requirements.txt
Cá nhân, tôi chỉ đặt những thứ này trong một kịch bản shell mà tôi chạy sau khi thực hiện git clone hoặc git pull.
Việc lưu trữ thư mục virtualenv cũng giúp việc xử lý nâng cấp pip trở nên khó khăn hơn một chút, vì bạn sẽ phải thêm / xóa thủ công và cam kết các tệp do nâng cấp. Với tệp tests.txt, bạn chỉ cần thay đổi các dòng thích hợp trong tests.txt và chạy lại pip install -r requirements.txt
. Như đã lưu ý, điều này cũng làm giảm "thư rác".