运行 带有自定义 distlib 的 Virtualenv?
Running Virtualenv with a custom distlib?
我想对 Python 的 distlib
进行一些开发,并在此过程中 运行 通过 virtualenv
的代码将 distlib 作为依赖项。
也就是说,不是运行 virtualenv 中的进程,而是运行 virtualenv 使用自定义依赖项的代码。实现此目标需要执行哪些步骤?
在我看来,正常的包管理 (pip
) 在这里是不可能的。
当然,最简单的方法就是简单地修改您的 Python 环境以搜索另一个目录,它会在从 stdlib 获取它之前找到您修改的 distlib
?执行此操作的经典方法是设置 PYTHONPATH
环境变量。您的 Python 安装无需更改!
我终于明白了。感谢您的回答 holdenweb 但这种特殊情况有点复杂。
我首先将 virtualenv
、pip
和 distlib
存储库克隆到 ~/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 使用我的自定义代码来创建新的虚拟环境。
我想对 Python 的 distlib
进行一些开发,并在此过程中 运行 通过 virtualenv
的代码将 distlib 作为依赖项。
也就是说,不是运行 virtualenv 中的进程,而是运行 virtualenv 使用自定义依赖项的代码。实现此目标需要执行哪些步骤?
在我看来,正常的包管理 (pip
) 在这里是不可能的。
当然,最简单的方法就是简单地修改您的 Python 环境以搜索另一个目录,它会在从 stdlib 获取它之前找到您修改的 distlib
?执行此操作的经典方法是设置 PYTHONPATH
环境变量。您的 Python 安装无需更改!
我终于明白了。感谢您的回答 holdenweb 但这种特殊情况有点复杂。
我首先将 virtualenv
、pip
和 distlib
存储库克隆到 ~/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 使用我的自定义代码来创建新的虚拟环境。