检查自定义(非 PyPI)包是否已安装的方法

问题描述 投票:0回答:1

我们有一些内部 Python 包与 PyPI 上的包同名 — 比如

package1
package2
package3
。有时,一些用户会错误地安装 PyPI 版本,所以我想知道是否有标准方法来验证他们是否安装了正确的软件包。

我目前的想法是在我们的

package0
中,它与PyPI不冲突,但确实导入了
package1
package2
package3
,可以做类似的事情:

# package0.__init__.py

import package1
import package2
import package2

for pkg in [package1, package2, package3]:
    try:
        assert "our-organization" in pkg.__url__
    except (AttributeError, AssertionError) as exc:
        raise ImportError(
            f"An incorrect version of {module.__name__} was detected. "
            "Please ensure you have installed correct internal version and not "
            f"a package on PyPI with the same name. ({exc})"
        )

当然,这只有在加载

package0
时才有效,如果直接在 jupyter 笔记本或其他东西中加载
package1
则不起作用。

python python-import pypi python-packaging
1个回答
0
投票

我建议使用

importlib.metadata
来内省已安装软件包的元数据。您可以检查元数据中的某些特定值,例如 URL 之一(正如您在问题中所建议的那样),或者可能是 trove 分类器(前缀为
Private ::
的可能是不错的候选者,因为没有这样的 trove 分类器可以位于 PyPI),或多个元数据值的组合。

© www.soinside.com 2019 - 2024. All rights reserved.