4
votes

Pourquoi certains noms de package Python sont-ils différents de leur nom d'importation?

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'
  • pyyaml ​​(pip instal pyyaml), mais import yaml
  • qtpy (pip install qtpy), oui l'importation est qtpy mais le package est 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).


0 commentaires

3 Réponses :


2
votes

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 >


0 commentaires

1
votes

Dans le cas de sphinx, vous pouvez vous moquer des packages tiers avec: autodoc_mock_imports


0 commentaires

1
votes

Les auteurs choisissent d'utiliser différents noms dans différents environnements pour plusieurs raisons:

Un mot d'avertissement

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.

Autres exemples

Nom dans la documentation vs nom du package "import" vs nom du package pypi vs paquets anaconda vs Debian < / a>:


0 commentaires