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

问题描述:

将python模块从一个virtualenv拷贝到另一个virtualenv是否可行?如果是这样做的话?如何将模块从一个virtualenv复制到另一个

通常,您可以将.egg-info从virtualenv的lib/site-packages文件夹复制到其他环境的lib/site-packages。

只要你从一个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 
+0

如果我只是试图复制*一个*包这个? – Claudiu 2013-07-12 18:34:31

+0

问题不在于复制软件包的数量*,而是源和目标之间Python版本,系统体系结构等的差异。如果源和目标位于同一台机器上,则应该没问题;如果他们在不同的机器上,你应该使用'pip freeze'。 – 2013-07-12 19:23:27

我的工作一台装有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 

在安装和使用PyQt5成功(硬位)加numpy的,SciPy的,IPython中工作等的VENV 我安装的virtualenv克隆:

workon myvenv 
pip install virtual-clone 
deactivate 

然后跑去:

virtualenv-clone venv1 venv2 

PyQt5以这种方式工作。命令行提示仍然名称venv1作为活性但内〜/ .virtualenv/venv2

cat activate* | grep "venv1" 

示出了三个文件激活内3个条目,activate.csh,和激活。鱼

在激活,更改

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" 
... 

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

编辑:这不回答这个问题“如何从一个virtualenv中的模块复制到另一个”但我敢肯定的结果是在许多情况下,所期望的一个,即基于创建一个新的VENV在以前创建的一个包含(所有)以前安装的模块。

好像我们不能只是复制一个virtualenv作为另一个。 即使你chnage在激活文件中的$ VIRTUAL_ENV,它仍然作为原产地virtualenv和点将安装所有包到源网站包/