【发布时间】:2018-09-20 17:34:58
【问题描述】:
我想根据软件包名称列表以编程方式安装和导入软件包。对于大多数包来说,这没有问题,因为包名和模块名是相同的。
但是,PyYAML 包是一个例外,因为它的模块被简单地称为 yaml,而且可能还有更多例外。
这是我用来安装和导入包/模块的python函数:
def install_and_import(package):
import importlib
try:
importlib.import_module(package) #needs module name!
except ImportError:
import pip
pip.main(['install', package]) #needs package name
finally:
globals()[package] = importlib.import_module(package)
为这个列表中的每个包调用函数['backoff', 'pyyaml'](从requirements.txt解析),我得到:
Collecting backoff
Installing collected packages: backoff
Successfully installed backoff-1.4.3
Collecting pyyaml
Installing collected packages: pyyaml
Successfully installed pyyaml-3.12
[...Trackback...]
ModuleNotFoundError: No module named 'pyyaml'
有没有办法,只给出包名称(例如,pyyaml),找出我实际需要导入的模块的名称(例如,yaml)?
【问题讨论】:
标签: python python-import python-packaging