Verwijder ongebruikte pakketten uit het vereistenbestand

Is er een gemakkelijke manier om niet-meer-gebruikende pakketten te verwijderen uit het requirements-bestand?

Ik heb een bash-script voor deze taak geschreven, maar het werkt niet zoals ik had verwacht. Omdat sommige pakketten niet worden gebruikt volgens hun PyPI-projectnamen. Bijvoorbeeld;

dj-database-url

pakket wordt gebruikt als

dj_database_url

Mijn project heeft veel pakketten in zijn eigen vereistenbestand, dus het één voor één zoeken is te rommelig, foutgevoelig en kost te veel tijd. Terwijl ik zocht, hebben IDE’s deze eigenschap nog niet.


Antwoord 1, autoriteit 100%

Je kunt code-inspectie gebruiken in PyCharm.

  1. Verwijder de inhoud van uw requirements.txtmaar bewaar het lege bestand.
  2. Laad uw project in,
  3. PyCharm ga naar Code -> Inspect code....
  4. Kies de optie Whole projectin het dialoogvenster en klik op OK.
    Zoek in het paneel met inspectieresultaten de sectie Package requirementsonder Python(merk op dat deze sectie alleen wordt weergegeven als er requirements.txtof setup.pybestand).
    De sectie zal een van de volgende berichten bevatten:
  • Package requirement '<package>' is not satisfiedals er een pakket is dat wordt vermeld in requirements.txtmaar niet wordt gebruikt in een .py-bestand.
  • Package '<package>' is not listed in project requirementsals er een pakket is dat wordt gebruikt in .py-bestanden, maar niet wordt vermeld in requirements.txt.

U bent geïnteresseerd in de tweede keuring.
U kunt alle gebruikte pakketten toevoegen aan requirements.txtdoor met de rechtermuisknop op het gedeelte Package requirementste klikken en Apply Fix 'Add requirements '<package>' to requirements.txt'. Merk op dat het slechts één pakketnaam zal tonen, maar het zal feitelijk alle gebruikte pakketten toevoegen aan requirements.txtals dit wordt aangeroepen voor sectie.

Als je wilt, kun je ze één voor één toevoegen, klik met de rechtermuisknop op de inspectie die bij een bepaald pakket hoort en kies Apply Fix 'Add requirements '<package>' to requirements.txt', herhaal dit voor elke inspectie van dit soort.

Daarna kunt u een schone virtuele omgeving creëren en pakketten installeren vanuit de nieuwe requirements.txt.

Houd er rekening mee dat PyCharm een ​​functie voor importoptimalisatie heeft, zie Invoer optimaliseren…. Het kan handig zijn om deze functie te gebruiken vóór alle andere hierboven genoemde stappen.

Fix toepassen voor alle pakketten die niet worden vermeld in requirements.txt


Antwoord 2, autoriteit 16%

De beste gok is om een ​​(verse) python venv/virtual-env te gebruiken met geenpakketten, of alleen die waarvan je zeker weet dat je ze nodig hebt, test je pakket – het installeren van ontbrekende pakketten met pipals je problemen tegenkomt, wat voor de meeste software vrij snel zou moeten zijn, gebruik dan het pip freezecommando om de pakketten op te sommen die je echt nodig hebt. Je kunt beter pip wheelgebruiken om een ​​wiel te maken met de pakketten erin.
De andere benadering zou zijn om:

  1. Gebruik pylintom elk bestand te controleren op ongebruikte importen en ze te verwijderen (u zou dit toch moeten doen ),
  2. Voer je tests uit om er zeker van te zijn dat het juist was,
  3. Gebruik een tool zoals snakefoodof snakefood3om uw nieuwe lijst met afhankelijkheden te genereren

Houd er rekening mee dat voor een goede werking van afhankelijkheidscontroles het raadzaam is om voorwaardelijke import en import binnen functies te vermijden.

Houd er ook rekening mee dat om zekerte zijn dat je alles hebt, het een goed idee is om een nieuwe venv/virtual-env te bouwen en te installeren vanuit je lijst met afhankelijkheden en vervolgens je code opnieuw te testen.

>


Antwoord 3

Ik heb met succes pip-check- vereist.

Met het commando pip-extra-reqs your_directorycontroleert het op alle ongebruikte afhankelijkheden in your_directory

Installeer het met pip install pip-check-reqs.

Other episodes