将虚拟环境移动到另一个主机文件夹

2 投票
2 回答
4824 浏览
提问于 2025-04-18 17:39

我不小心忘记设置 WORKON_HOME 这个变量,结果我的虚拟环境都创建在了 /root/.virtualenvs 这个目录下。它们运行得很好,我通过激活某个环境,然后用 (env)$ pip freeze 命令查看里面安装了哪些特定的模块,做了一些测试。

后来我发现了这个 WORKON_HOME 的错误路径,于是我决定把主目录改成 /usr/local/pythonenv。我创建了这个目录,并把 /root/.virtualenvs 里的所有内容都移动到了 /usr/local/pythonenv,同时也修改了 WORKON_HOME 变量的值。现在,用 workon 命令激活环境似乎没问题(也就是说,提示符变成了 (env)$),但是如果我再用 (env)$ pip freeze,我看到的模块列表比之前长得多,而且里面并不包括之前在那个特定环境中安装的模块。

我想,单纯地移动文件和指定新的 WORKON_HOME 目录可能还不够。我是不是需要在某个配置文件里指定新的主目录位置,或者为特定环境设置一些配置文件呢?

2 个回答

0

我使用了 virtualenv --relocatable 这个功能。开始的时候看起来没问题,但后来我发现安装了不同版本的Python:

$ . VirtualEnvs/moslog/bin/activate
(moslog)$ ~/VirtualEnvs/moslog/bin/mosloganalisys.py 
python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

记得在目标主机上重新创建相同的虚拟环境结构。

5

虚拟环境默认情况下是不能移动的。如果你想把一个已有的虚拟环境变成可以移动的,可以使用 virtualenv --relocatable <virtualenv> 这个命令,看看能不能成功。不过,这个选项是实验性的,不太推荐使用。

最可靠的方法是创建新的虚拟环境。在旧的虚拟环境中使用 pip freeze -l > requirements.txt 命令,可以得到一个已安装包的列表。然后创建新的虚拟环境,再用 pip install -r requirements.txt 命令把这些包安装到新的环境里。

撰写回答