Certains packages sont importés avec une chaîne qui est différente du nom du package sur PyPI, par exemple :
$ make html WARNING: autodoc: failed to import module 'wireshark' from module 'logcollector.plugins'; the following exception was raised: No module named 'qtpy'
Plusieurs outils ne peuvent pas gérer cela, par exemple sphinx:
$ pip list | grep -i "yaml\|qt" PyYAML 3.13 QtPy 1.5.2
Je ne m'en souviens pas pour le moment, mais il en va de même pour les outils qui analysent le fichier requirements.txt
et affiche des avertissements indiquant que le package yaml
n'est pas installé (mais il l'est et son nom est pyyaml).
3 Réponses :
Parce que ces deux concepts ne sont pas vraiment liés.
L'un est un concept python de noms de paquet / module, l'autre un concept de gestionnaire de paquet.
Regardez une simple commande d'empaquetage avec zip:
zip -r MyCoolTool.zip tool.py
L'outil est nommé tool
, qui n'est probablement pas unique et si vous ne savez pas que c'est MyCoolTool vous ne savez pas de quel outil
il s'agit. Quand je le télécharge quelque part, je le nomme MyCoolTool
, donc vous avez maintenant un nom plus unique, qui peut être un peu plus descriptif.
L'autre point est qu'un package pip peut inclure plus de modules qu'un seul. PyYAML
pourrait par exemple inclure un deuxième module python yaml2xml
en plus de yaml
.
Enfin il peut y avoir plusieurs implémentations. PyYAML
ressemble à une implémentation python pure. Supposons maintenant que vous ayez besoin d'un analyseur très rapide, alors vous pouvez programmer CYAML
avec un C-backend, mais la même interface au nom yaml
.
p >
Dans le cas de sphinx, vous pouvez vous moquer des packages tiers avec: autodoc_mock_imports
Les auteurs choisissent d'utiliser différents noms dans différents environnements pour plusieurs raisons:
propy3
qui peut être utilisé comme une goutte -en remplacement de propy
. Je dirais que c'est aussi ce qui s'est passé avec oreiller
. li>
beautifulsoup4
peut être importé en tant que bs4
(+ parking du package pour bs4
< / a>) flask-restx
le nom du package et le nom de l'importation ont été modifiés. Comme Ziyad Edher l'a souligné dans une discussion connexe , le typosquatting est un problème sur PyPI ( source ). Si vous ajoutez des packages avec des noms différents, cela devient plus probable.
Nom dans la documentation vs nom du package "import" vs nom du package pypi vs paquets anaconda vs Debian < / a>: