On 09/08/2020 15:23, Jason Friedman wrote:
I have some code I'm going to share with my team, many of whom are not yet
familiar with Python. They may not have 3rd-party libraries such as pandas
or selenium installed. Yes I can instruct them how to install, but the path
of least resistance is to have my code to check for missing dependencies
and attempt to install for them. This code works as desired:

import importlib
import subprocess

PIP_EXE = "/opt/python/bin/pip3"

for module_name in ("module1", "module2", "module3"):
     try:
         importlib.import_module(module_name)
     except ModuleNotFoundError:
         install_command = f"{PIP_EXE} install {module_name}"
         status, output = subprocess.getstatusoutput(install_command)
         if not status:
             importlib.import_module(module_name)
             print(f"Successfully installed {module_name}.")
         else:
             print(f"Error when attempting to install {module_name}:
{output}")

The cherry-on-top would be to import with the "aliasing" and "from" they
will most likely see on the web, so that my code matches what they see
there. In other words, instead of:

import pandas
df = pandas.from_csv (...)
import selenium
browser = selenium.webdriver.Firefox()

on the web they will typically see:

import pandas as pd
df = pd.from_csv (...)
from selenium import webdriver
browser = webdriver.Firefox()

I don't see anything in the importlib module documentation that supports
this.

Try: The import system (https://docs.python.org/3/reference/import.html) and Simple Statements (https://docs.python.org/3/reference/simple_stmts.html?highlight=import#grammar-token-import-stmt)

Remember that you can test to ensure a library is available, or take evasive-action if it is not:
>>> import so
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'so'

(there is a module called "os" though!)
--
Regards =dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to