这个答案中的“revirtual”是什么?

时间:2014-08-13 16:19:46

标签: python virtualenv

关于S / O的这个问题:

Can existing virtualenv be upgraded gracefully?

接受的答案说你可以:

  

使用Python 2.6 virtualenv来" revirtual"现有目录

我似乎无法找到关于如何" revirtual"现有的虚拟现实。我知道如何手动安装python,但我非常专注于" python / virtualenv"在特定的virtualenv中升级python的方法。

在我非常具体的情况下,我已成为其他人的管理员'代替。系统python是2.6.6,但virtualenvs都在virtualenv路径中使用2.7.4,类似于:

/home/user_name/.virtualenvs/application_name/bin/python2.7

虽然系统中没有python 2.7.x.我找不到任何手动安装python的证据,我在网上找不到有关使用pip或使用apt-get / yum或任何东西在virtualenv中安装不同版本的python的任何细节。

所以,我非常具体的问题是:

  1. 一个" revirtual"一个virtualenv?
  2. 如何在virtualenv中升级python" python"方式是什么?
  3. 是否有其他方法可以在virtualenvs中管理python版本?
  4. 谢谢,如果我能以任何方式澄清我的问题,请告诉我!

    -S

1 个答案:

答案 0 :(得分:4)

常见警告:首先制作备份副本。但是,virtualenv创建的结构并不复杂,因此应该可以找到所需内容或创建新结构并进行迁移。其中包含~/.virtualenvs的路径意味着它可能是使用virtualenvwrapper创建的,因此您也可以阅读它。

virtualenv制作bin目录中可执行文件的副本,这意味着他们不会 在其他地方存在。但是,在libincludes目录中,默认情况下会有来自" source"的项目的符号链接。 python(除非有人改变了那个设置)。您可以在这些目录中执行ls -l,也许您会找到安装了python 2.7的地方 - 或者可能是一些破坏的符号链接。

lib下面应该是一个或多个python-<version>目录,有一些符号链接(可能)到python标准库的东西和一个site-packages目录,这是你安装的软件包的位置。< / p>

现在,升级。如果您尝试更新virtualenv&#34;就地&#34; (即你只是运行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>