某些软件包导入时使用的字符串与PyPI上的软件包名称不同,例如:
$ pip list | grep -i "yaml\|qt"
PyYAML 3.13
QtPy 1.5.2
[几种工具无法处理此问题,例如狮身人面像:
$ 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 concept,另一个是程序包管理器的概念。
使用zip查看简单的打包命令:
zip -r MyCoolTool.zip tool.py
该工具名为tool
,它可能不是唯一的,并且如果您不知道其MyCoolTool,则不知道它是哪个tool
。当我将其上传到某个地方时,我将其命名为MyCoolTool
,因此您现在有了一个更独特的名称,可能更具描述性。
另一点是,一个pip包可能包含的模块不止一个。 PyYAML
例如可以包含除yaml2xml
之外的第二个python模块yaml
。
最后可以有几种实现。 PyYAML
听起来像是纯python实现。现在,假设您需要一个非常快速的解析器,则可以使用C后端对CYAML
进行编程,但是名称为yaml
的接口相同。
如果是狮身人面像,您可以使用:autodoc_mock_imports模拟第三者的包裹>
作者选择在不同环境中使用不同名称的原因有很多: