将虚拟环境移动到另一个主机文件夹
我不小心忘记设置 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 个回答
我使用了 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
记得在目标主机上重新创建相同的虚拟环境结构。
虚拟环境默认情况下是不能移动的。如果你想把一个已有的虚拟环境变成可以移动的,可以使用 virtualenv --relocatable <virtualenv>
这个命令,看看能不能成功。不过,这个选项是实验性的,不太推荐使用。
最可靠的方法是创建新的虚拟环境。在旧的虚拟环境中使用 pip freeze -l > requirements.txt
命令,可以得到一个已安装包的列表。然后创建新的虚拟环境,再用 pip install -r requirements.txt
命令把这些包安装到新的环境里。