问题出在名称与导入过程中用法不同的python软件包中,例如:
$ 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文件并显示警告的工具也是如此,该工具未安装python yaml软件包(但它的名称是pyyaml)
答案 0 :(得分: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 :(得分:1)
作者选择在不同环境中使用不同名称的原因有多种:
propy3
时可以做到这一点,它可以直接替代propy
。我会说pillow
也会发生这种情况。beautifulsoup4
可以作为bs4
导入(为bs4
添加包裹寄存)flask-restx
,软件包名称和导入名称已被更改。< / li>
与Ziyad Edher has pointed out中的a related discussion一样,域名抢注是PyPI(source)上的一个问题。如果添加名称不同的软件包,则更有可能。
文档中的名称与“导入”软件包名称与pypi package name与anaconda packages与Debian的对比:
答案 2 :(得分:0)
在使用狮身人面像的情况下,您可以使用autodoc_mock_imports
模拟第三方包装