代码之家  ›  专栏  ›  技术社区  ›  thebjorn

将“导入”名称映射到PyPI名称?

  •  2
  • thebjorn  · 技术社区  · 7 年前

    这是工作用的 pydeps --externals https://github.com/thebjorn/pydeps )其中列出了模块导入的外部包,例如:

    c:\github\pydeps> pydeps --externals pydeps
    [
        "configparser",
        "enum",
        "stdlib_list",
        "yaml"
    ]
    

    requirements.txt 文件。

    我知道这四条线都有问题,但这个问题与最后两条线有关( stdlib_list yaml )来自名为 stdlib-list PyYAML 分别是。

    IIUC无法从模块名中找到包名,即使已安装依赖项。这仍然正确吗?

    我发现了 site-packages/*.dist-info/top_level.txt https://www.python.org/dev/peps/pep-0427/#the-dist-info-directory ). 剩下的就是寻找 site-packages/*.dist-info/RECORD <importname>/__init__.pyc? 是否有访问此信息的现有API? pkginfo 看起来很有希望,但不是:

    import pkginfo, stdlib_list
    print pkginfo.Installed(yaml).package_name    # print "yaml"
    

    另一个选项是保留module/import name->package/pip install name的大型映射。我看到其他人有这个想法,例如。 https://github.com/bndr/pipreqs/blob/master/pipreqs/mapping

    (*)我还没有发现“事物”的任何唯一且一致使用的名称,即 pip install 包裹 模块 --我相信这是有争议的;-)

    0 回复  |  直到 7 年前