这个答案中的"revirtual"是什么?

stb*_*rth 7 python virtualenv

在这个关于S/O的问题中:

现有的virtualenv可以优雅地升级吗?

接受的答案说你可以:

使用Python 2.6 virtualenv来"复制"现有目录

我似乎无法找到有关如何"复制"现有virtualenv的任何细节.我知道如何手动安装python,但我非常专注于"python/virtualenv"方式在特定的virtualenv中升级python.

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

/home/user_name/.virtualenvs/application_name/bin/python2.7
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 一个"revirtual"如何成为一个虚拟的人?
  2. 如何在virtualenv中以"python"的方式升级python?
  3. 有没有其他方法可以在virtualenvs中管理python版本?

谢谢,如果我能以任何方式澄清我的问题,请告诉我!

-S

Jas*_*n S 4

通常的警告:首先制作备份副本。然而,创建的结构virtualenv并不那么复杂,因此应该可以找到您需要的结构,或者创建一个新的结构并进行迁移。其中的路径~/.virtualenvs意味着它可能是使用virtualenvwrapper创建的,因此您也可以阅读它。

virtualenv在目录中创建可执行文件的副本bin,这意味着它们不必存在于其他地方。然而,在libincludes目录中,默认情况下会有来自“源”python 的项目的符号链接(除非有人更改了该设置)。你可以在这些目录中执行 a 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>稍后使用。