Is there any easy way to delete no-more-using packages from requirements file?
I wrote a bash script for this task but, it doesn't work as I expected. Because, some packages are not used following their PyPI project names. For example;
dj-database-url
package is used as
dj_database_url
My project has many packages in its own requirements file, so, searching them one-by-one is too messy, error-prone and takes too much time. As I searched, IDEs don't have this property, yet.
I've used with success pip-check-reqs.
With command
pip-extra-reqs your_directory
it will check for all unused dependencies inyour_directory
Install it with
pip install pip-check-reqs
.The best bet is to use a (fresh) python virtual-env with no packages, or only those you definitely know you need, test your package - installing missing packages with
pip
as you hit problems which should be quite quick for most software then use thepip freeze
command to list the packages you really need. Better you you could usepip wheel
to create a wheel with the packages in.The other approach would be to:
Note that for any dependency checking to work well it is advisable to avoid conditional import and import within functions.
Also note that to be sure you have everything then it is a good idea to build a new virtual-env and install from your dependencies list then re-test your code.
You can use Code Inspection in PyCharm.
Delete the contents of your
requirements.txt
but keep the empty file. Load your project in, PyCharm go toCode -> Inspect code...
. ChooseWhole project
option in dialog and clickOK
. In inspection results panel locatePackage requirements
section underPython
(note that this section will be showed only if there is anyrequirements.txt
orsetup.py
file). The section will contain one of the following messages:Package requirement '<package>' is not satisfied
if there is any package that is listed inrequirements.txt
but not used in any .py file.Package '<package>' is not listed in project requirements
if there is any package that is used in .py files, but not listed inrequirements.txt
.You are interested in the second inspection. You can add all used packages to
requirements.txt
by right clicking thePackage requirements
section and selectingApply Fix 'Add requirements '<package>' to requirements.txt'
. Note that it will show only one package name, but it will actually add all used packages torequirements.txt
if called for section.If you want, you can add them one by one, just right click the inspection corresponding to certain package and choose
Apply Fix 'Add requirements '<package>' to requirements.txt'
, repeat for each inspection of this kind.After that you can create clean virtual environment and install packages from new
requirements.txt
.Also note that PyCharm has import optimisation feature, see Optimize imports.... It can be useful to use this feature before any other steps listed above.