运行 带有自定义 distlib 的 Virtualenv?

Running Virtualenv with a custom distlib?

我想对 Python 的 distlib 进行一些开发,并在此过程中 运行 通过 virtualenv 的代码将 distlib 作为依赖项。

也就是说,不是运行 virtualenv 中的进程,而是运行 virtualenv 使用自定义依赖项的代码。实现此目标需要执行哪些步骤?

在我看来,正常的包管理 (pip) 在这里是不可能的。

当然,最简单的方法就是简单地修改您的 Python 环境以搜索另一个目录,它会在从 stdlib 获取它之前找到您修改的 distlib?执行此操作的经典方法是设置 PYTHONPATH 环境变量。您的 Python 安装无需更改!

我终于明白了。感谢您的回答 holdenweb 但这种特殊情况有点复杂。

我首先将 virtualenvpipdistlib 存储库克隆到 ~/git-repos/

由于virtualenv执行pip的方式,改变Python路径是不行的,还需要在virtualenv/virtualenv.py

中修改
SCRIPT = textwrap.dedent("""
    import sys
    import pkgutil
    import tempfile
    import os

    import sys
    sys.path.insert(0, '/home/harald/git-repos/pip')

    import pip
    ...

Pip 供应 distlib,因此对于 运行 我的自定义版本,我创建了一个从 pip 的标准 distlib 到我的克隆源的符号链接:

~/git-repos/pip/pip/_vendor/distlib -> ~/git-repos/distlib/distlib/

然后在创建并激活环境之后,我也在终端运行这个

export PYTHONPATH=/home/harald/git-repos/pip

在此之后,virtualenv 使用我的自定义代码来创建新的虚拟环境。