2012-01-09 36 views

Trả lời

0

Thông thường bạn có thể sao chép thông tin .egg từ thư mục lib/site-package của virtualenv vào lib/site-packages của môi trường khác.

35

Chừng nào bạn đang di chuyển chúng từ một virtualenv khác trên cùng một máy , bạn có thể dễ dàng chỉ làm:

$ cp -r [env1]/lib/pythonX.X/site-packages/* [env2]/lib/pythonX.X/site-packages/ 

Tuy nhiên, nếu môi trường là trên các máy khác nhau hoặc sử dụng các phiên bản khác nhau của python hoặc một số khác biệt lớn khác, nó có lẽ không phải là một ý tưởng tốt. Nói chung nó an toàn hơn nhiều để tạo ra một requirements.txt, và sau đó sử dụng để tải lên tất cả các mô-đun tương tự trong môi trường khác. Bạn có thể tạo tệp theo cách thủ công nếu muốn nhưng dễ dàng hơn khi chỉ sử dụng pip.

$ pip freeze -E [env1] > requirements.txt 

Hoặc, nếu virtualenv bạn được kích hoạt đã có, bạn chỉ có thể làm:

$ pip freeze > requirements.txt 

Sau đó, trong môi trường khác, bạn có thể làm:

$ pip install -E [env2] -r /path/to/requirements.txt 
+0

sẽ có bất cứ điều gì sai nếu tôi cố gắng sao chép * one * package like điều này? – Claudiu

+0

Sự cố không nằm trong số lượng * của gói được sao chép, nhưng bất kỳ sự khác biệt nào trong phiên bản Python, kiến ​​trúc hệ thống, v.v., giữa nguồn và đích. Nếu nguồn và đích nằm trên cùng một máy, bạn sẽ ổn; nếu chúng ở trên các máy khác nhau, bạn nên sử dụng 'pip freeze'. –

2

tôi đang làm việc trên một máy 64bit với Ubuntu-14.04-64. Tôi biên soạn và cài đặt python-3.4.3 đến /opt/python3.4/ và tạo ra một vitualenv dựa trên python này.

mkvirtualenv -p /opt/python3.4/bin/python venv1 

Ngoài ra để dễ:

sudo apt-get install virtualenvwrapper 

Với venv cài đặt và làm việc với PyQt5 thành công (các bit cứng) cộng với NumPy, scipy, ipython, vv Tôi đã cài đặt virtualenv-clone: ​​

workon myvenv 
pip install virtual-clone 
deactivate 

và sau đó chạy:

virtualenv-clone venv1 venv2 

PyQt5 hoạt động theo cách này. Các dòng lệnh nhắc nhở vẫn tên venv1 như hoạt động nhưng trong ~/.virtualenv/venv2

cat activate* | grep "venv1" 

chương 3 mục trong ba tác phẩm kích hoạt, activate.csh, và kích hoạt. cá

Trong kích hoạt, thay đổi

if [ "x(myvenv1) " != x ] ; then 
     PS1="(myvenv1) $PS1" 
else 

to

... 
     PS1="(myvenv2) $PS1" 
... 

Kích hoạt .csh thay đổi

if ("venv1" != "") then 
     set env_name = "venv1" 
else 

để

... 
    set env_name = "venv2" 
... 

Trong activate.fish thay đổi

if test -n "(venv1) " 
     printf "%s%s%s" "(venv1) " (set_color normal) (_old_fish_prompt) 
     return 
end 

để

... 
    printf "%s%s%s" "(venv2) " (set_color normal) (_old_fish_prompt) 
... 

Bây giờ khi bạn 012.hoặc workon venv2 dấu nhắc lệnh sẽ hiển thị chính xác môi trường của bạn (bản sao nhân bản của venv1).

Chỉnh sửa: điều này không trả lời câu hỏi "Cách sao chép mô-đun từ virtualenv này sang một virtualenv khác" nhưng tôi chắc chắn kết quả là trong nhiều trường hợp mong muốn, cụ thể là tạo một venvới mới trên một thiết bị đã tạo trước đó bao gồm (tất cả) các mô-đun đã được cài đặt trước đó.

0

có vẻ như chúng tôi không thể chỉ sao chép một virtualenv làm một tệp khác. ngay cả khi bạn chnage $ VIRTUAL_ENV trong tệp kích hoạt, nó vẫn hoạt động như trong virtualenv gốc và pip sẽ cài đặt tất cả các gói tới origin-packages/

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