是否可以将python模块从一个virtualenv复制到另一个。如果这样做是怎么做的?
答案 0 :(得分:39)
只要你在相同的机器上将它们从一个virtualenv移动到另一个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
答案 1 :(得分:2)
我正在使用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-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的克隆副本)。
编辑:这不回答问题“如何将模块从一个virtualenv复制到另一个”但我很确定结果在许多情况下是理想的结果,即创建基于先前创建的一个新的venv,其包括(所有)先前安装的模块。
答案 2 :(得分:1)
通常,您可以将.egg-info从virtualenv的lib / site-packages文件夹复制到其他环境的lib / site-packages。
答案 3 :(得分:1)