在这个关于 S/O 的问题中:
接受的答案表明您可以:
使用Python 2.6 virtualenv“重新虚拟”现有目录
我似乎找不到有关如何“重新虚拟”现有虚拟环境的任何详细信息。我知道如何手动安装 python,但我正在非常具体地寻找“python / virtualenv”方式来升级特定 virtualenv 内的 python。
在我的特殊情况下,我代替别人成为了管理员。系统 python 是 2.6.6,但是 virtualenv 在 virtualenv 路径中都使用 2.7.4,类似于:
/home/user_name/.virtualenvs/application_name/bin/python2.7
虽然系统中没有python 2.7.x。我找不到任何手动安装 python 的证据,也无法在网上找到任何有关使用 pip 或使用 apt-get/yum 或任何在 virtualenv 中安装不同版本的 python 的详细信息。
所以,我的非常具体的问题是:
谢谢,如果我能以任何方式澄清我的问题,请告诉我!
-S
通常警告:首先制作备份副本。然而,由
virtualenv
创建的结构并不那么复杂,因此应该可以找到您需要的结构,或者创建一个新的结构并进行迁移。带有 ~/.virtualenvs
的路径意味着它可能是用 virtualenvwrapper 创建的,所以你也可以阅读它。
virtualenv
在 bin
目录中制作可执行文件的副本,这意味着它们不有 存在于其他地方。然而,在 lib
和 includes
目录中,默认情况下会有来自“源”python 的项目的符号链接(除非有人更改了该设置)。您可以在这些目录中执行 ls -l
,也许您会找到 python 2.7 的安装位置 - 或者可能是一些损坏的符号链接。
在
lib
下应该是一个或多个 python-<version>
目录,其中有一些(可能)到 python 标准库内容的符号链接和一个 site-packages
目录,这是你安装的软件包所在的位置。
现在,升级。如果您尝试“就地”更新 virtualenv(即您只需运行
virtualenv --python==python<version> <existing-directory>
),那么您可能会遇到两个问题:(1)除非您删除/移动它,否则 bin/python
符号链接不会被替换, (2) lib
下的目录是每个 python 版本的,所以如果你不使用 2.7,那么 site-packages
目录将不会自动继承——你必须重新安装软件包,或者进入并移动它,这将可能工作,除非你已经编译了二进制扩展,或者正在迁移到3.x,或者发生了其他奇怪的事情。
另一种更干净的方法是创建一个新的、全新的 virtualenv,然后重新安装必要的软件包。首先找到您自己的应用程序的包,并确定它们是否有一个可以工作的
setup.py
或者只是位于目录中的代码。如果他们没有正确引入所有依赖项的 setup.py
,那么在现有的 virtualenv 文件夹中,您可以运行 ./bin/pip freeze
来获取已安装软件包的列表。您可以将其保存到文件中并稍后使用 pip install -r <filename>
。
但是有没有“重虚拟”这样的东西呢?这是一个严肃的问题。