检查模块是否存在,如不存在则安装它

49 投票
11 回答
79371 浏览
提问于 2025-04-16 09:00

我想检查一个模块是否存在,如果不存在的话,我想安装它。

我该怎么做呢?

到目前为止,我有这段代码,如果模块不存在,它会正确地打印出f

try:
    import keyring
except ImportError:
    print 'f'

11 个回答

14

注意: 这是针对Ipython / Jupyter的特定解决方案。

在使用笔记本或在线内核时,我通常会使用系统调用来完成。

try:
  import keyring
except:
  !pip install keyring
  import keyring

另外,有人可能希望使用conda installmamba install来代替。

52
import pip

def import_or_install(package):
    try:
        __import__(package)
    except ImportError:
        pip.main(['install', package])       

这段代码的意思是,它试着导入一个包(也就是一组功能),这个包的类型是字符串。如果导入失败了,它就会调用pip(一个用来安装Python包的工具),然后尝试从那里安装这个包。

22

这是应该怎么做的,如果我说错了,请纠正我。不过,Noufal在这个问题的另一个回答中似乎也确认了这一点,所以我想这应该是对的。

在为我写的一些脚本编写setup.py脚本时,我依赖于我的系统的包管理器来为我安装所需的库。

所以,在我的setup.py文件中,我这样写了:

package = 'package_name'
try:
    return __import__(package)
except ImportError:
    return None

所以如果package_name已经安装好了,那就没问题,继续进行。如果没有安装,就通过我用subprocess调用的包管理器来安装它。

撰写回答