gpt4 book ai didi

python - PYTHONPATH 环境变量之前的路径中的鸡蛋

转载 作者:太空狗 更新时间:2023-10-29 16:56:28 27 4
gpt4 key购买 nike

如果我从 easy_install 安装了包,鸡蛋会被添加到 sys.path 中的 PYTHONPATH 变量中的项目之前。

例如,如果我在当前目录中安装了一个名为 foo 的 egg 包以及一个名为 foo 的包,然后执行以下操作:

PYTHONPATH="." python
>>> import foo

这将使用 foo 的 egg 版本而不是本地目录。检查 sys.path 表明 eggs 被放置在 PYTHONPATH之前项。这似乎坏了。有什么方法可以覆盖此行为吗?

最佳答案

不幸的是,这是通过 setuptools/command/easy_install.py 中的硬编码模板完成的。您可以使用编辑过的模板创建一个修补过的 setuptools,但我没有找到从外部扩展 easy_install 的干净方法。

每次运行 easy_install 时,它都会重新生成文件 easy_install.pth。这是您可以在 easy_install 之后运行的快速脚本,用于从 easy_install.pth 中删除页眉和页脚。您可以创建一个包装器 shell 脚本以在 easy_install 之后立即运行它:

#!/usr/bin/env python
import sys
path = sys.argv[1]
lines = open(path, 'rb').readlines()
if lines and 'import sys' in lines[0]:
open(path, 'wb').write(''.join(lines[1:-1]) + '\n')

例子:

% easy_install gdata
% PYTHONPATH=xyz python -c 'import sys; print sys.path[:2]'
['', '/Users/pat/virt/lib/python2.6/site-packages/gdata-2.0.14-py2.6.egg']

% ./fix_path ~/virt/lib/python2.6/site-packages/easy_install.pth
% PYTHONPATH=xyz python -c 'import sys; print sys.path[:2]'
['', '/Users/pat/xyz']

为了进一步说明,这里是 easy-install.pth 的格式:

import sys; sys.__plen = len(sys.path)
./gdata-2.0.14-py2.6.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

这两行 import sys 是导致鸡蛋出现在路径开头的罪魁祸首。我的脚本只是删除了那些 sys.path-munging 行。

关于python - PYTHONPATH 环境变量之前的路径中的鸡蛋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com