【问题标题】:Check whether a python package has been installed in 'editable' (egg-link) mode or not?检查是否以“可编辑”(鸡蛋链接)模式安装了 python 包?
【发布时间】:2017-07-23 19:04:53
【问题描述】:

有什么方法可以检查 Python 包是否已正常安装(pip install/setup.py install)或处于可编辑/蛋链接模式(pip install -e/setup.py develop)?

我知道我可以检查包的路径是否包含site-packages,这很可能意味着它是“不可编辑”安装,但这感觉非常肮脏,我宁愿避免这种情况。


我尝试检查的原因是我的应用程序正在检查各个位置的配置文件,例如/etc/myapp.conf 和~/.myapp.conf。对于开发人员,我想签入<pkgdir>/myapp.conf,但由于我显示了可能的位置列表以防找不到配置,所以我真的不想在软件包安装到站点包时包含 pkgdir 选项(因为用户不应该在那里创建配置文件)。

【问题讨论】:

    标签: python pip setuptools python-packaging


    【解决方案1】:

    pip 为此包含code(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 许可的,因此可以安全地复制和粘贴到几乎任何项目中。

    【讨论】:

    • 如果pip install -e . 正在进行,您知道如何从setup.py 内部进行吗?
    • @nmz787 可能有点脆弱,但您可以尝试检查sys.argv 并寻找-e。它适用于大多数情况,但如果在需求文件中指定了 -e,则不会。
    猜你喜欢
    • 2017-03-08
    • 2010-11-06
    • 1970-01-01
    • 2017-09-07
    • 2011-02-17
    • 1970-01-01
    • 2023-04-10
    • 2013-07-11
    • 2021-11-23
    相关资源
    最近更新 更多