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

问题描述 投票:0回答:5

是否可以将 Python 模块从一个 virtualenv 复制到另一个 virtualenv?

如果是的话,这是如何完成的?

python pip virtualenv
5个回答
55
投票

只要您将它们从一个 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



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/venv2cat activate* | grep "venv1"

显示三个文件中的 3 个条目 
activate

activate.cshactivate.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 创建一个新的 venv创建了一个包含(所有)先前安装的模块的模块。


1
投票


1
投票


0
投票

Users/<user>/PycharmProjects/<projectname>/venv/Lib/site-packages

复制“wordcloud”和“wordcloud-1.8.1.dist-info”文件夹并粘贴到您的新项目

/<projectname>/venv/Lib/site-packages
    

© www.soinside.com 2019 - 2024. All rights reserved.