我可以移动 virtualenv 吗?

新手上路,请多包涵

这个问题不是重复的。

它不仅涉及 重命名 虚拟环境,还涉及将其实际 移动 到不同的目录,包括可能的不同用户的目录。

这与仅仅重命名虚拟环境不同,尤其是对于不熟悉 virtualenvs 的人。

如果我创建一个 virtualenv,然后将它移动到另一个文件夹,它还能工作吗?

 $ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $

…那天晚些时候,虚拟环境移动了…

 (my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/

问题:

这行得通吗?

 $ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas

我的意思是,这不是关于尝试这样做是否明智的问题(当然,除非这种智慧是幽默的),而是更多关于它是否可能的问题。我真的很想知道是否可以在 Python 3 中完成,或者我是否只需要 吸收 并克隆它。

我可以只是 mv a virtualenv 那样没有悲伤吗?我确实想避免悲伤。

原文由 Nathan Basanese 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 794
2 个回答

可惜:

不,你不能简单地 mv 。有一些解决方法,但重新安装可能更容易。

 (my-python-venv)$ /home/me/PeskyPartyPEnvs/pip3 install foaas
zsh: /home/me/PeskyPartyPEnvs/pip3: bad interpreter: /home/me/Env/my-python-venv/bin/python3: no such file or directory
(my-python-venv)$ deactivate
$

…按下 enter 很多挫败感,以下作品

$
$
$ pip3 search foaas

除了它不是来自 my-python-venv ,所以悲伤。

想要 mv 你的 virtualenv 并使用它,否则未修改?

简短回答:

我会让 Boromir 说出来,这样他就能说清楚:

好吧,你 _不能_。

原文由 Nathan Basanese 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的。可以在同一平台上移动它。您可以在现有环境中使用 --relocatable

来自 --help

–relocatable – 使现有的 virtualenv 环境可重定位。这修复了脚本并使所有 .pth 文件相对。

但是,这似乎并没有改变 activate 脚本,而只是改变了 pip*easy_install* 脚本。在 activate 脚本中, $VIRTUAL_ENV 环境变量硬编码为原始 /path/to/original/venv$VIRTUAL_ENV 变量也用于设置活动环境的 PATH ,因此必须根据新位置更改它才能调用 python -c-453和 pip 等没有绝对路径。

要解决此问题,您可以更改 activate 脚本中的 $VIRTUAL_ENV 环境变量(例如使用 sed --- 脚本),一切都应该顺利进行

使用示例:

 $ cd ~/first
$ virtualenv my-venv
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV="/home/username/first/my-venv"
$ virtualenv --relocatable my-venv
Making script my-venv/bin/easy_install relative
Making script my-venv/bin/easy_install-2.7 relative
Making script my-venv/bin/pip relative
Making script my-venv/bin/pip2 relative
Making script my-venv/bin/pip2.7 relative
### Note that `activate` has not been touched
$ mkdir ~/second
$ mv my-venv ~/second
$ cd ~/second
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV=/home/username/first/my-venv
### (This variable hasn't been changed, it still refers to the old, now non-existent directory!)
$ sed -i -e 's|username/first|username/second|' my-venv/bin/activate
## sed can be used to change the path.
## Note that the `-i` (in place) flag won't work on all machines.
$ source my-venv/bin/activate
(my-venv) $ pip install foass
...
(my-venv) $ python
[...]
> import foass

万岁,现在您可以安装东西并将它们加载到新定位的虚拟环境中。

原文由 hilcharge 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题