Virtualenv và kiểm soát phiên bản nguồn


84

Gần đây tôi đã bắt đầu một dự án Django và tôi nhanh chóng nhận ra rằng virtualenv sẽ thực sự hữu ích vì nhiều lý do. Tôi đã thiết lập virtualenv và dự án của mình, nhưng bây giờ tôi tự hỏi tôi nên thêm tệp nào vào điều khiển nguồn của mình (trong trường hợp của tôi là Mercurial). Tôi có nên thêm tất cả các tệp trong thư mục venv không? Làm cách nào để đảm bảo một đồng nghiệp có thể sao chép và bắt đầu làm việc ngay lập tức mà không cần phải thiết lập lại env?


18
Tôi không khuyên bạn nên đặt virtualenv dưới quyền kiểm soát nguồn - nó sẽ không di động trên các phiên bản python, hệ điều hành hoặc nền tảng 32/64 bit. Thay vào đó, chỉ cần sử dụng ~/path/to/virtualenv/bin/pip freeze > ~/path/to/repo/requirements.txt. Nhà phát triển khác sẽ cần phải thiết lập virtualenv riêng của họ, nhưng đó là nghĩa đen hai lệnh - virtualenv ~/path/to/env, ~/path/to/env/bin/pip install -r ~/path/to/requirements.txt.
AdamKG

1
Kính gửi googler, cũng xem: stackoverflow.com/a/6012590/82216
sampablokuper

Câu trả lời:


106

Bạn tạo tệp "yêu cầu" (thường là requirements.txt) mà bạn cam kết với dự án của mình:

pip freeze > requirements.txt

Sau đó, mỗi nhà phát triển sẽ thiết lập virtualenv của riêng họ và chạy:

pip install -r requirements.txt

6

Tất cả những phức tạp về môi trường này là điều phổ biến khi bạn phát triển python / django! Tôi đã trải qua tất cả những vấn đề này và tôi đã thử nghiệm một số giải pháp! Những điều tôi đã thử nghiệm:

  1. Dự án đang chạy cục bộ
  2. Dự án chạy trong virtualenv
  3. Dự án chạy trong máy ảo
  4. Dự án chạy trong máy ảo, sử dụng vagrant

Giải pháp tốt nhất mà tôi tìm thấy là # 4! bởi vì công ty mà tôi từng làm việc, mỗi người trong nhóm có một hệ điều hành khác nhau, tất cả các loại windows, mac và linux, và để cài đặt tất cả các phụ thuộc cho từng môi trường thì cần có thời gian! Vì vậy, chúng tôi quyết định dùng thử virtualenv, nó thực sự tốt! nhưng mỗi người vẫn phải thiết lập môi trường sống của riêng mình. Vấn đề trong virtualenv là tất cả các nguồn python đều nằm trong môi trường mà bạn tạo! Vì vậy, tôi sẽ không đẩy các tệp đó sang điều khiển phiên bản nguồn! Giải pháp tốt nhất là # 4, bởi vì đó chính xác là những gì tôi cần, Vagrant sử dụng Chef để thiết lập môi trường của bạn, vì vậy bạn chỉ cần viết một số công thức nấu ăn và để vagrant chạy chúng cho bạn! Sau đó, bạn đẩy các công thức đó sang SCM, sau đó khi người tiếp theo lấy các tệp từ SCM và tải lại VM, tất cả các phần phụ thuộc sẽ được tự động cài đặt!

Tôi có một bài đăng trên blog giải thích thêm về chủ đề này cũng như tôi đã tạo một dự án Django Blank trên github để bạn có thể lấy nó để có điểm bắt đầu cho dự án của mình bằng cách sử dụng vagrant.

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/ (liên kết không còn hoạt động, vì vậy được liên kết với Wayback Machine)

BIÊN TẬP

Giải pháp từ Chris Pratt cũng là một giải pháp tốt, tuy nhiên, một số thư viện không dễ cài đặt trong tất cả các hệ điều hành, ví dụ, rất nhiều người trên Mac gặp sự cố khi họ muốn cài đặt MySQLdb-python. vốn là một thư viện thực sự chung, nhưng nếu mọi người trong nhóm của bạn phải dành thời gian giải quyết vấn đề này thì không tốt chút nào!


MySQLdb-pythonĐây là một lý do thực sự tốt để sử dụng một môi trường đầy đủ, nhưng điều này cũng không thể thực hiện được với pip / request.txt?
kbuilds
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.