как скопировать модули из одного virtualenv в другой - PullRequest
28 голосов
/ 09 января 2012

Можно ли скопировать модули Python из одного virtualenv в другой. Если это так, как это сделать?

Ответы [ 4 ]

39 голосов
/ 10 января 2012

Пока вы перемещаете их из одного virtualenv в другое на той же машине, вы можете легко сделать:

$ 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 голосов
/ 29 мая 2015

Я работаю на 64-битной машине с Ubuntu-14.04-64.Я скомпилировал и установил python-3.4.3 в / opt / python3.4 / и создал vitualenv на основе этого питона.

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

Также для простоты:

sudo apt-get install virtualenvwrapper

С установленным venv и успешно работающим с 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 записи в трех файлах активации, activ.csh и activ.fish

При активации измените

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

на

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

In activ.csh изменить

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

на

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

In activ.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).

Редактировать: это не 't ответить на вопрос «Как скопировать модули из одного virtualenv в другой» , но я вполне уверен, что во многих случаях желаемый результат, а именно создание нового venv на основе ранее созданногокоторый включает в себя (все) ранее установленные модули.

1 голос
/ 12 мая 2017

кажется, что мы не можем просто скопировать одно virtualenv как другое.даже если вы измените значение $ VIRTUAL_ENV в файле активации, оно все равно будет действовать как в origin virtualenv, и pip установит все пакеты в исходные пакеты сайта /

1 голос
/ 09 января 2012

Обычно вы можете скопировать .egg-info из папки lib / site-packages в virtualenv в lib / site-packages другой среды.

...