如何在 python 中重新创建虚拟环境

dan*_*iel 1 python virtualenv

我已经在 Ubuntu 16.04 上安装了 virtualenv 和 virtualenvwrapper 我创建了一个名为 env1 的环境

$ sudo apt-get install python-pip
$ pip install virtualenv
$ pip install --upgrade pip 
$ pip install virtualenvwrapper
$ export WORKON_HOME=~/Envs
$ mkdir -p $WORKON_HOME
$ source /usr/local/bin/virtualenvwrapper.sh
$ mkvirtualenv env1
Run Code Online (Sandbox Code Playgroud)

进入 (env1) 后,我已经安装了几个软件包

(env1) $ pip install numpy
(env1) $ pip install scipy
(env1) $ pip install matplotlib
(env1) $ apt-get install python-tk
Run Code Online (Sandbox Code Playgroud)

我还安装了opencv3(我没有复制如何安装,因为太长了)

我正在将 env1 用于特定项目。

现在我想使用相同的包启动另一个项目,但我还想添加其他包。

我已经创建了 env2,我想知道是否可以将 env1 复制到 env2,而不需要从头开始重新安装所有内容。

Jon*_*sco 5

你最好的选择是这样做:

虚拟环境-1:

pip freeze > requirements.txt 
Run Code Online (Sandbox Code Playgroud)

虚拟环境-2:

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

假设它们都在同一系统上并使用相同的 Python,那么有可能只复制站点包:

cp -Rp /environments/virtualenv-1/lib/python2.7/site-packages \
       /environments/virtualenv-2/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

但这不一定有效:

  • 一些包会将依赖项和其他东西安装到 /bin/ 或其他地方。大多数人不这样做,但很多人这样做。
  • 如果 virtualenv 的 python 版本不同——即使是次要版本——也可能会破坏使用 c 扩展的库。

因此,最好的选择是pip freeze从该文件重新安装。