Удаление неиспользуемых пакетов из файла требований

Есть ли простой способ удалить ненужные пакеты из файла требований?

Я написал сценарий bash для этой задачи, но он не работает так, как я ожидал. Потому что некоторые пакеты не используются после их имен проектов PyPI. Например;

dj-database-url

пакет используется как

dj_database_url

Мой проект имеет множество пакетов в собственном файле требований, поэтому их поиск по очереди слишком грязный, подвержен ошибкам и занимает слишком много времени. Когда я искал, у IDE нет этого свойства.

Ответ 1

Вы можете использовать Code Inspection в PyCharm.

Удалите содержимое вашего requirements.txt но сохраните пустой файл. Загрузите проект, PyCharm перейдите в Code → Inspect code... Выберите " Whole project в диалоговом окне и нажмите " OK. В панели результатов проверки найдите раздел " Package requirements пакетам" под Python (обратите внимание, что этот раздел будет показан только в том случае, если есть файл requirements.txt или setup.py). Раздел будет содержать одно из следующих сообщений:

  • Package requirement '<package>' is not satisfied если есть какой-либо пакет, указанный в файле requirements.txt но не используемый в любом файле.py.
  • Package '<package>' is not listed in project requirements если есть какой-либо пакет, который используется в файлах.py, но не указан в файле requirements.txt.

Вас интересует вторая проверка. Вы можете добавить все используемые пакеты requirements.txt щелкнув правой кнопкой мыши на Package requirements раздела и выберите Apply Fix 'Add requirements '<package>' to requirements.txt'. Обратите внимание, что он отображает только одно имя пакета, но фактически добавит все используемые пакеты в файл requirements.txt если вызван раздел.

Если вы хотите, вы можете добавить их один за другим, просто щелкните правой кнопкой мыши инспекцию, соответствующую определенному пакету, и выберите " Apply Fix 'Add requirements '<package>' to requirements.txt', повторите для каждой проверки такого рода.

После этого вы можете создать чистую виртуальную среду и установить пакеты с нового requirements.txt.

Также обратите внимание, что PyCharm имеет функцию оптимизации импорта, см. Оптимизировать импорт.... Полезно использовать эту функцию перед любыми другими шагами, перечисленными выше.

Apply fix for all packages not listed in requirements.txt

Ответ 2

Лучше всего использовать (свежий) python virtual-env без пакетов или только те, которые вы определенно знаете, что вам нужно, проверить свой пакет - установить недостающие пакеты с помощью pip поскольку вы нажимаете на проблемы, которые должны быть довольно быстрыми для большинства программ, а затем использовать команду pip freeze чтобы отобразить пакеты, которые вам действительно нужны. Лучше вы можете использовать pip wheel для создания колеса с пакетами.
Другой подход заключался бы в следующем:

  1. Используйте pylint, чтобы проверять каждый файл на неиспользуемые импорты и удалять их (вы все равно должны это делать),
  2. Запустите свои тесты, чтобы убедиться, что это правильно,
  3. Используйте инструмент, например snakefood, чтобы создать новый список зависимостей

Обратите внимание, что для любой проверки зависимостей, чтобы работать хорошо, рекомендуется избегать условного импорта и импорта внутри функций.

Также обратите внимание, что, чтобы быть уверенным, что у вас есть все, тогда хорошая идея - создать новый виртуальный env и установить из списка зависимостей, а затем повторно протестировать ваш код.

Ответ 3

Я использовал с успехом pip-check-reqs.

С помощью команды pip-extra-reqs your_directory будет проверяться все неиспользуемые зависимости в your_directory

Установите его с помощью pip install pip-check-reqs.