2012-03-06 37 views
59

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 tin 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 khi bạn phải thiết lập lại env?Virtualenv và kiểm soát phiên bản nguồn

+16

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

+0

Kính gửi googler, cũng thấy: http://stackoverflow.com/a/6012590/82216 – sampablokuper

Trả lời

72

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

pip freeze > requirements.txt 

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

pip install -r requirements.txt 
6

Tất cả các môi trường phức tạp này là loại phổ biến khi bạn đang phát triển python/django! Tôi đã đ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 mà tôi đã thử nghiệm:

  1. Dự án chạy địa phương Dự án
  2. chạy trong virtualenv
  3. Dự án đang chạy trong một
  4. Dự án VM chạy trong một máy ảo, sử dụng lang thang

Giải pháp tốt nhất 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 cửa sổ, mac và linux, và cài đặt tất cả các phụ thuộc cho mỗi môi trường cần có thời gian! Vì vậy, chúng tôi quyết định thử virtualenv, điều đó thực sự tốt! nhưng mỗi người vẫn phải thiết lập môi trường riêng của mình. Vấn đề trong virtualenv là tất cả các nguồn python nằm trong môi trường mà bạn tạo ra! Vì vậy, tôi sẽ không đẩy các tập tin đó vào một điều khiển phiên bản nguồn! Giải pháp tốt nhất là # 4, vì đó là chính xác 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à để cho âm đạo chạy chúng cho u! Sau đó, u đẩy các công thức đó vào SCM, sau đó khi người tiếp theo nhận các tệp từ SCM và tải lại máy ảo tất cả các phụ thuộc sẽ được cài đặt tự động!

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

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

EDIT

Giải pháp từ Chris Pratt là một trong những tốt là tốt, tuy nhiên một số thư viện không quá đơn giản để cài đặt trong tất cả Hệ điều hành, ví dụ, rất nhiều người trên Mac gặp vấn đề khi họ muốn cài đặt MySQLdb-python. đó là một thư viện thực sự phổ biến, 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!

+0

'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ể được thực hiện với pip/yêu cầu .txt? – kbuilds

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