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

1 投票
1 回答
50 浏览
提问于 2025-04-13 20:13

我们有一些内部的Python包,它们的名字和PyPI上的包是一样的,比如说有package1package2package3。有时候,一些用户会不小心安装了PyPI上的版本,所以我在想有没有什么标准的方法来确认他们安装的是正确的包。

我现在的想法是在我们的package0中,这个包的名字和PyPI不冲突,但它会导入package1package2package3,可以做一些类似这样的事情:

# 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 notebook中加载package1,那就不行了。

1 个回答

-1

我建议你使用 importlib.metadata 来查看已安装包的元数据。你可以在这些元数据中查找一些特定的值,比如你在问题中提到的某个网址,或者一个 分类标签(那些以 Private :: 开头的标签可能是不错的选择,因为这样的分类标签在 PyPI 上是不会出现的),或者多个元数据值的组合。

撰写回答