如何将模块从一个virtualenv复制到另一个virtualenv

2024-04-26 21:44:33 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以将python模块从一个virtualenv复制到另一个virtualenv。如果可以,这是如何实现的


Tags: 模块virtualenv
3条回答

通常,您可以将.egg信息从virtualenv的lib/site packages文件夹复制到其他环境的lib/site包中

我正在使用Ubuntu-14.04-64的64位机器上工作。我编译并安装了python-3.4.3到/opt/python3.4/,并基于此python创建了一个vitualenv

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

此外,为了方便起见:

sudo apt-get install virtualenvwrapper

安装venv并成功使用PyQt5(硬钻头)以及numpy、scipy、ipython等。 我安装了virtualenv克隆:

workon myvenv
pip install virtual-clone
deactivate

然后跑:

virtualenv-clone venv1 venv2

PyQt5就是这样工作的。命令行提示符仍将venv1命名为活动,但在~/.virtualenv/venv2

cat activate* | grep "venv1"

显示三个文件中的3个条目activateactivate.cshactivate.fish

在激活中,更改

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

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

中激活.csh更改

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

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

中激活.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/activateworkon venv2时,命令提示符将正确显示您的环境(venv1的克隆副本)

编辑:这并没有回答“如何将模块从一个VirtualNV复制到另一个”的问题,但我很确定在许多情况下,结果都是理想的,即基于先前创建的一个新的venv创建一个新的venv,其中包括(所有)先前安装的模块

只要您在相同的机器上将它们从一个VirtualNV移动到另一个,您就可以轻松地执行以下操作:

$ 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

相关问题 更多 >