Удаление неиспользуемых пакетов из файла требований
Есть ли простой способ удалить ненужные пакеты из файла требований?
Я написал сценарий 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
для создания колеса с пакетами.
Другой подход заключался бы в следующем:
- Используйте pylint, чтобы проверять каждый файл на неиспользуемые импорты и удалять их (вы все равно должны это делать),
- Запустите свои тесты, чтобы убедиться, что это правильно,
- Используйте инструмент, например snakefood, чтобы создать новый список зависимостей
Обратите внимание, что для любой проверки зависимостей, чтобы работать хорошо, рекомендуется избегать условного импорта и импорта внутри функций.
Также обратите внимание, что, чтобы быть уверенным, что у вас есть все, тогда хорошая идея - создать новый виртуальный env и установить из списка зависимостей, а затем повторно протестировать ваш код.
Ответ 3
Я использовал с успехом pip-check-reqs.
С помощью команды pip-extra-reqs your_directory
будет проверяться все неиспользуемые зависимости в your_directory
Установите его с помощью pip install pip-check-reqs
.