2011-09-15 36 views
78

Tôi có một môi trường hiện có trong virtualenv, với rất nhiều gói, nhưng một phiên bản Django cũ.Duplicate virtualenv

gì nếu tôi muốn trùng lặp môi trường này,
để tôi có thể có một môi trường trong đó tôi có thể cài đặt một phiên bản mới hơn Django,
nhưng giữ tất cả các gói đã có trong môi trường khác?

+3

tôi sẽ pip đóng băng tất cả các yêu cầu của bạn vào một tập tin 'requirements.txt' và tạo virtualenv khác và chạy pip cài đặt requirements.txt –

+0

Nếu phiên bản python của ảo môi trường mà bạn muốn sao chép khác với môi trường python mặc định của bạn, bạn có thể thiết lập môi trường mới là 'virtualenv -p/path/to/older/venv/bin/python new_venv' và sau đó sử dụng' requirements.txt' mà bạn được tạo sau khi 'pip freeze' – GiriB

Trả lời

116

Cách dễ nhất là sử dụng pip để tạo tệp yêu cầu. Một tệp yêu cầu về cơ bản là một tệp chứa danh sách tất cả các gói python bạn muốn cài đặt (hoặc đã được cài đặt trong trường hợp tệp được tạo bởi pip) và phiên bản của chúng là gì.

Để tạo một tập tin yêu cầu, đi vào virtualenv ban đầu của bạn, và chạy:

pip freeze > requirements.txt 

Điều này sẽ tạo ra requirements.txt tập tin cho bạn. Nếu bạn mở tập tin đó lên trong trình soạn thảo văn bản yêu thích của bạn, bạn sẽ thấy một cái gì đó như:

Django==1.3 
Fabric==1.0.1 
etc... 

Bây giờ, sửa dòng mà nói Django==x.x nói Django==1.3 (hoặc bất kỳ phiên bản bạn muốn cài đặt trong virtualenv mới của bạn) .

Cuối cùng, kích hoạt mới virtualenv của bạn, và chạy:

pip install -r requirements.txt 

Và pip sẽ tự động tải về và cài đặt tất cả các mô-đun python được liệt kê trong tập tin requirements.txt của bạn, ở bất cứ phiên bản mà bạn chỉ định!

+1

Cảm ơn bạn! Trong khi googling tôi tìm thấy rất nhiều trang ồn ào, lộn xộn và khó hiểu ... Giải pháp của bạn rất sạch sẽ và đơn giản ... nó làm cho ngày của tôi;) – dolma33

+0

nếu tôi sao chép thư mục và sau đó dán nó vào một máy khác? Nó sẽ hoạt động? Giả sử tất nhiên phụ thuộc apt-get đã được giải quyết –

+0

Sẽ không hoạt động =) – rdegges

2

Can bạn không chỉ đơn giản là:

  • Sao chép env thư mục ảo hiện có để một hình mới
  • Update để các Django mới?
+5

Một số lần tôi sử dụng cách tiếp cận này, nhưng có sự bất tiện khi phải cập nhật một số đường dẫn bên trong tập lệnh bin/activate. –

+3

Thay đổi có đơn giản và thay thế cho các tham chiếu đến tên env hay nó phức tạp hơn thế không? – Greg

+1

Trong trường hợp của tôi, chỉ cần cập nhật đường dẫn trong hằng số VIRTUAL_ENV trong thùng/kích hoạt đã thực hiện thủ thuật – bryanph

17

Một lựa chọn khác là sử dụng virtualenv-clone gói:

Một kịch bản cho nhân bản một virtualenv phi relocatable.

+0

Xin chào, tôi có quyền giả định điều này cho phép tôi sao chép môi trường python WHOLE vào một tệp hay không. Sau đó, tôi sẽ chỉ cần tải tập tin này trong một máy tính/hệ điều hành mới và tôi sẽ nhận được tất cả các gói trang web của tôi cài đặt trở lại – aceminer

8

virtualenvwrapper cung cấp một command to duplicate virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME] 
+0

Không thực sự là một ý tưởng tốt. "Sao chép môi trường ảo không được hỗ trợ tốt. Mỗi virtualenv có thông tin đường dẫn được mã hóa cứng vào đó và có thể có trường hợp mã sao chép không biết cần cập nhật tệp cụ thể. Hãy sử dụng cẩn thận". – Temak