为什么某些Python软件包名称与其导入名称不同?

问题描述 投票:2回答:3

某些软件包导入时使用的字符串与PyPI上的软件包名称不同,例如:

$ pip list | grep -i "yaml\|qt"  
PyYAML      3.13               
QtPy        1.5.2
  • pyyaml(pip instal pyyaml),但导入yaml
  • qtpy(pip install qtpy),是,导入是qtpy,但包是QtPy

[几种工具无法处理此问题,例如狮身人面像:

$ make html
WARNING: autodoc: failed to import module 'wireshark' from module 'logcollector.plugins'; the following exception was raised:
No module named 'qtpy'

我现在不记得了,但是对于扫描requirements.txt文件并显示未安装yaml软件包的警告(但它的名称是pyyaml)的工具也是如此。

python pip python-sphinx pyyaml qtpy
3个回答
1
投票

因为这两个概念并不是真正相关。一个是程序包/模块名称的python concept,另一个是程序包管理器的概念。

使用zip查看简单的打包命令:

zip -r MyCoolTool.zip tool.py

该工具名为tool,它可能不是唯一的,并且如果您不知道其MyCoolTool,则不知道它是哪个tool。当我将其上传到某个地方时,我将其命名为MyCoolTool,因此您现在有了一个更独特的名称,可能更具描述性。

另一点是,一个pip包可能包含的模块不止一个。 PyYAML例如可以包含除yaml2xml之外的第二个python模块yaml

最后可以有几种实现。 PyYAML听起来像是纯python实现。现在,假设您需要一个非常快速的解析器,则可以使用C后端对CYAML进行编程,但是名称为yaml的接口相同。


1
投票

如果是狮身人面像,您可以使用:autodoc_mock_imports模拟第三者的包裹>


0
投票

作者选择在不同环境中使用不同名称的原因有很多:

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