web-dev-qa-db-fra.com

Supprimer les packages inutilisés du fichier d'exigences

Existe-t-il un moyen simple de supprimer les packages qui n'utilisent plus le fichier requirements?

J'ai écrit un script bash pour cette tâche, mais cela ne fonctionne pas comme prévu. Car, certains packages ne sont pas utilisés après leurs noms de projet PyPI. Par exemple;

dj-database-url

le package est utilisé comme

dj_database_url

Mon projet a de nombreux packages dans son propre fichier d'exigences, donc les rechercher un par un est trop compliqué, sujet aux erreurs et prend trop de temps. Pendant ma recherche, les IDE n'ont pas encore cette propriété.

29
myildirim

Vous pouvez utiliser l'inspection de code dans PyCharm .

Supprimez le contenu de votre requirements.txt mais conservez le fichier vide. Chargez votre projet dans, PyCharm allez à Code -> Inspect code.... Choisissez Whole project option dans la boîte de dialogue et cliquez sur OK. Dans le panneau des résultats d'inspection, recherchez Package requirements section sous Python (notez que cette section ne sera affichée que s'il y a requirements.txt ou setup.py fichier). La section contiendra l'un des messages suivants:

  • Package requirement '<package>' is not satisfied si un package est répertorié dans requirements.txt mais n'est utilisé dans aucun fichier .py.
  • Package '<package>' is not listed in project requirements s'il existe un package utilisé dans les fichiers .py, mais non répertorié dans requirements.txt.

Vous êtes intéressé par la deuxième inspection. Vous pouvez ajouter tous les packages utilisés à requirements.txt en cliquant avec le bouton droit sur Package requirements section et en sélectionnant Apply Fix 'Add requirements '<package>' to requirements.txt'. Notez qu'il n'affichera qu'un seul nom de package, mais il ajoutera en fait tous les packages utilisés à requirements.txt si appelé pour la section.

Si vous le souhaitez, vous pouvez les ajouter un par un, faites un clic droit sur l'inspection correspondant à certains colis et choisissez Apply Fix 'Add requirements '<package>' to requirements.txt', répéter pour chaque inspection de ce type.

Après cela, vous pouvez créer un environnement virtuel propre et installer des packages à partir de nouveaux requirements.txt.

Notez également que PyCharm a une fonction d'optimisation des importations, voir Optimiser les importations ... . Il peut être utile d'utiliser cette fonctionnalité avant toute autre étape répertoriée ci-dessus.

Apply fix for all packages not listed in requirements.txt

59
NickAb

Le meilleur pari est d'utiliser un ( frais ) python virtual-env avec pas de paquets, ou seulement ceux dont vous savez certainement avoir besoin, testez votre paquet - en installant les paquets manquants avec pip lorsque vous rencontrez des problèmes qui devraient être assez rapides pour la plupart des logiciels, puis utilisez les pip freeze commande pour lister les packages dont vous avez vraiment besoin. Mieux vous pouvez utiliser pip wheel pour créer une roue avec les packages dans.
L'autre approche consisterait à:

  1. Utilisez pylint pour vérifier chaque fichier pour les importations inutilisées et les supprimer, (vous devriez quand même le faire),
  2. Exécutez vos tests pour vous assurer que c'était bien,
  3. Utilisez un outil comme snakefood pour générer votre nouvelle liste de dépendances

Notez que pour que la vérification des dépendances fonctionne correctement, il est conseillé d'éviter l'importation conditionnelle et l'importation dans les fonctions.

Notez également que pour être sûr que vous avez tout, c'est une bonne idée de construire un nouvel environnement virtuel et d'installer à partir de votre liste de dépendances puis de tester à nouveau votre code.

8
Steve Barnes

J'ai utilisé avec succès pip-check-reqs .

Avec la commande pip-extra-reqs your_directory il vérifiera toutes les dépendances inutilisées dans your_directory

Installez-le avec pip install pip-check-reqs.

1
siulkilulki