How to automatically install required packages from a Python script as necessary?

Posted on May 9, 2022

Question

Is there anything in Python or Linux what basically instructs the system to "install whatever is necessary". Basically I find it annoying to install python packages for each new script/system/server that I work on. Each time I end up doing a sudo pip or an apt-get or dnf anyway. Why not automate that within the script itself. Wherever a 'no package found' error crops up, pass the library name to the install statement. Is this there ?

PS: I know docker exists, but am talking at a Python/script level or a direct system level for purely execution purposes.

Answer

How to automatically install required packages from a python script as necessary?

Let's assume that your Python script is example.py:

import os
import time
import sys
import fnmatch
import requests
import urllib.request
from bs4 import BeautifulSoup
from multiprocessing.dummy import Pool as ThreadPool 
print('test')

You can use pipreqs to automatically generate a requirements.txt file based on the import statements that the Python script(s) contain. To use pipreqs, assuming that you are in the directory where example.py is located:

pip install pipreqs
pipreqs .

It will generate the following requirements.txt file:

requests==2.23.0
beautifulsoup4==4.9.1

which you can install with:

pip install -r requirements.txt