Подтвердить что ты не робот

Как копировать модули из одного виртуального в другой

Возможно ли копировать модули python из одного виртуального в другой. Как это сделать?

4b9b3361

Ответ 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 установит все пакеты в исходный сайт-пакеты/