Возможно ли копировать модули python из одного виртуального в другой. Как это сделать?
Как копировать модули из одного виртуального в другой
Ответ 1
Пока вы перемещаете их с одного виртуального на другой на том же компьютере, вы можете просто сделать:
$ cp -r [env1]/lib/pythonX.X/site-packages/* [env2]/lib/pythonX.X/site-packages/
Однако, если среда находится на разных машинах или использует разные версии python или некоторые другие существенные различия, это, вероятно, не очень хорошая идея. В общем, гораздо безопаснее генерировать requirements.txt
, а затем использовать это, чтобы загрузить все те же модули в другой среде. Вы можете создать файл вручную, если хотите, но проще использовать pip
.
$ pip freeze -E [env1] > requirements.txt
Или, если ваш virtualenv уже активирован, вы можете просто сделать:
$ pip freeze > requirements.txt
Затем в другой среде вы можете:
$ pip install -E [env2] -r /path/to/requirements.txt
Ответ 2
Я работаю на 64-битной машине с Ubuntu-14.04-64. Я скомпилировал и установил python-3.4.3 в/opt/python3.4/и создал vitualenv на основе этого python.
mkvirtualenv -p /opt/python3.4/bin/python venv1
Также для удобства:
sudo apt-get install virtualenvwrapper
С установленным венцом и работой с PyQt5 успешно (жесткий бит) плюс numpy, scipy, ipython и т.д. Я установил virtualenv-clone:
workon myvenv
pip install virtual-clone
deactivate
а затем выполните:
virtualenv-clone venv1 venv2
PyQt5 работает таким образом. Запрос командной строки по-прежнему называет venv1 активным, но внутри ~/.virtualenv/venv2
cat activate* | grep "venv1"
показывает 3 записи в трех файлах активировать, activate.csh и activate.fish
В режиме активации измените
if [ "x(myvenv1) " != x ] ; then
PS1="(myvenv1) $PS1"
else
к
...
PS1="(myvenv2) $PS1"
...
В параметре activate.csh
if ("venv1" != "") then
set env_name = "venv1"
else
к
...
set env_name = "venv2"
...
В активации activate.fish
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)
...
Теперь, когда вы source ~/.virtualenv/venv2/bin/activate
или workon venv2
, в командной строке будет правильно отображаться ваша среда (клонированная копия venv1).
Изменить: это не отвечает на вопрос "Как копировать модули из одного виртуального в другой", но я уверен, что результат во многих случаях является желательным, а именно создание нового венства на основе ранее созданный тем, который включает (все) ранее установленные модули.
Ответ 3
Обычно вы можете скопировать .egg-info из папки lib/site-packages виртуального файла в пакеты lib/site другой среды.
Ответ 4
похоже, мы не можем просто скопировать один virtualenv как другой. даже вы chnage $VIRTUAL_ENV в файле активации, он по-прежнему действует как в источнике virtualenv, и pip установит все пакеты в исходный сайт-пакеты/