这个答案中的“重新虚拟”是什么?

问题描述 投票:0回答:2

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

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

接受的答案表明您可以:

使用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 的详细信息。

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

  1. 如何“重新虚拟”一个 virtualenv?
  2. 如何以“python”方式在 virtualenv 中升级 python?
  3. 有其他方法可以在 virtualenvs 中管理 python 版本吗?

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

-S

python virtualenv
2个回答
4
投票

通常警告:首先制作备份副本。然而,由

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>


0
投票

但是有没有“重虚拟”这样的东西呢?这是一个严肃的问题。

© www.soinside.com 2019 - 2024. All rights reserved.