67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
# autopip.py
|
|
|
|
import os, builtins
|
|
|
|
old_import = builtins.__import__
|
|
|
|
def new_import(name, globals=None, locals=None, fromlist=(), level=0):
|
|
import_to_pip = {
|
|
"skimage": "scikit-image",
|
|
"sklearn": "scikit-learn",
|
|
"bs4": "beautifulsoup4",
|
|
"PIL": "pillow",
|
|
"yaml": "PyYAML",
|
|
"cv2": "opencv-python",
|
|
"Crypto": "pycryptodome",
|
|
"MySQLdb": "pymysql",
|
|
"jose": "python-jose",
|
|
"dotenv": "python-dotenv",
|
|
"jwt": "PyJWT",
|
|
"magic": "python-magic",
|
|
"Cryptodome": "pycryptodomex",
|
|
"dateutil": "python-dateutil",
|
|
"markupsafe": "MarkupSafe",
|
|
"pywt": "PyWavelets",
|
|
"httplib2": "httplib2",
|
|
"serial": "pyserial",
|
|
"Image": "Pillow",
|
|
"cairo": "pycairo",
|
|
"mx.DateTime": "egenix-mx-base",
|
|
"cocos": "cocos2d",
|
|
"zmq": "pyzmq",
|
|
"MySQLdb": "mysqlclient",
|
|
"lxml.etree": "lxml",
|
|
"lxml.objectify": "lxml",
|
|
"wx": "wxPython",
|
|
"gi": "PyGObject",
|
|
"enchant": "pyenchant",
|
|
"tkSnack": "python-tksnack",
|
|
"gflags": "python-gflags",
|
|
"glog": "glog",
|
|
"leveldb": "plyvel",
|
|
"OpenGL": "PyOpenGL",
|
|
"OpenGL.GL": "PyOpenGL",
|
|
"OpenGL.GLU": "PyOpenGL",
|
|
"OpenGL.GLUT": "PyOpenGL",
|
|
"gevent.monkey": "gevent",
|
|
"netifaces": "netifaces",
|
|
"netCDF4": "netCDF4",
|
|
"netaddr": "netaddr",
|
|
"netCDF4_utils": "netCDF4",
|
|
"rasterio": "rasterio",
|
|
"gdal": "GDAL",
|
|
"osgeo": "GDAL",
|
|
"osr": "GDAL",
|
|
"ogr": "GDAL",
|
|
"pycurl": "pycurl",
|
|
"pygments": "Pygments",
|
|
"pydot": "pydot"
|
|
}
|
|
|
|
try: return old_import(name, globals, locals, fromlist, level)
|
|
except ImportError as e:
|
|
if name[0] != '_':
|
|
os.popen(f'pip install {import_to_pip.get(name, name)} 2>&1').read()
|
|
|
|
builtins.__import__ = new_import
|