当python包名称与导入名称不同时

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

问题在于python包的名称与导入期间的用法不同,例如:

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

有几种工具无法处理,例如sphinx:

$ 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)

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

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

用zip看一个简单的打包命令:

zip -r MyCoolTool.zip tool.py

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

另一点是,pip包可能包含多于一个的模块。例如,PyYAML可以包括yaml2xml附加的第二个python模块yaml

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


1
投票

如果是狮身人面像,你可以使用:autodoc_mock_imports模拟第三方套餐

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