检查Python包是否以“可编辑”(egg-link)模式安装。

7
有没有办法检查Python包是否已经正常安装(pip install / setup.py install)还是以可编辑/蛋链接模式安装(pip install -e / setup.py develop)?
我知道可以检查包的路径是否包含site-packages,这很可能意味着它是“不可编辑”的安装方式,但这种方法感觉非常不好,我宁愿避免使用。
我尝试检查这个的原因是,我的应用程序正在各个地方检查配置文件,例如/etc/myapp.conf和~/.myapp.conf。对于开发人员,我想在/myapp.conf中进行检查,但是由于如果未找到配置,则会显示可能位置列表,因此当包已安装到site-packages时,我真的不希望包括pkgdir选项(因为用户不应该在其中创建配置文件)。
1个回答

4

pip 包含了代码,用于将 pip freeze 的输出行前缀设置为 -e。由于 pip 的 API 不保证稳定性,最好将代码复制到自己的应用程序中,而不是从 pip 中导入它:

def dist_is_editable(dist):
    """Is distribution an editable install?"""
    for path_item in sys.path:
        egg_link = os.path.join(path_item, dist.project_name + '.egg-link')
        if os.path.isfile(egg_link):
            return True
    return False

代码采用MIT许可证,因此将其复制并粘贴到几乎任何项目中都应该是安全的。

setup.py 内部,有什么办法可以知道是否正在进行 pip install -e . - nmz787
@nmz787 或许有点脆弱,但你可以尝试检查 sys.argv 并查找 -e。这在大多数情况下都有效,但如果 -e 在要求文件中指定,则无效。 - silviot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接