![](/img/trans.png)
[英]Why some package name of a complete referring could be omitted in python?
[英]Why are some Python package names different than their import name?
一些包是使用與 PyPI 上包的名稱不同的字符串導入的,例如:
$ pip list | grep -i "yaml\|qt"
PyYAML 3.13
QtPy 1.5.2
一些工具無法處理,例如 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
文件並打印未安裝yaml
包的警告(但它是,它的名稱是 pyyaml)。
因為這兩個概念並沒有真正的關聯。
一個是包/模塊名稱的python概念,另一個是包管理器概念。
看一個帶 zip 的簡單打包命令:
zip -r MyCoolTool.zip tool.py
該工具名為tool
,這可能不是唯一的,如果您不知道它的 MyCoolTool,您就不會知道它是哪個tool
。 當我將它上傳到某個地方時,我將其命名為MyCoolTool
,因此您現在使用了一個更獨特的名稱,這可能更具描述性。
另一點是,一個 pip 包可能包含更多的模塊,而不僅僅是一個。 例如, PyYAML
可以在yaml
包含第二個 python 模塊yaml2xml
。
最后可以有多種實現方式。 PyYAML
聽起來像一個純 python 實現。 現在假設您需要一個非常快速的解析器,然后您可以使用 C 后端編程CYAML
,但名稱為yaml
接口相同。
在 sphinx 的情況下,您可以使用以下命令模擬 3rd 方包: autodoc_mock_imports
作者在不同環境中選擇使用不同名稱的原因有多種:
propy3
它可以作為一個下拉更換為propy
。 我想說這也是pillow
發生的事情。beautifulsoup4
可以導入作為bs4
(+為包停車bs4
)flask-restx
,包名稱和導入名稱已更改。正如Ziyad Edher在相關討論中指出的那樣,域名搶注是 PyPI 上的一個問題( 來源)。 如果您添加具有不同名稱的包,則更有可能出現這種情況。
文檔中的名稱 vs "import" 包名 vs pypi 包名vs anaconda 包vs Debian :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.