是否可以将 Python 模块从一个 virtualenv 复制到另一个 virtualenv?
如果是的话,这是如何完成的?
只要您将它们从一个 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
并基于此 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
、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 创建一个新的 venv创建了一个包含(所有)先前安装的模块的模块。
从
Users/<user>/PycharmProjects/<projectname>/venv/Lib/site-packages
复制“wordcloud”和“wordcloud-1.8.1.dist-info”文件夹并粘贴到您的新项目
/<projectname>/venv/Lib/site-packages
。