如何自动安装缺失的Python模块?

64 投票
4 回答
115447 浏览
提问于 2025-04-16 18:17

我想能够这样写:

try:
    import foo
except ImportError:
    install_the_module("foo")

在这种情况下,推荐的或者说常见的处理方式是什么呢?

我看到很多脚本只是简单地打印出一个错误或警告,告诉用户缺少某个模块,有时候还会提供一些安装的说明。不过,如果我知道这个模块在PyPI上是可以找到的,那我是不是可以更进一步,直接启动安装过程呢?

4 个回答

34
try:
    import foo
except ImportError:
    sys.exit("""You need foo!
                install it from http://pypi.python.org/pypi/foo
                or run pip install foo.""")

不要去动用户的安装设置。

75

冒着被投反对票的风险,我想提出一个简单的解决办法。请注意,我完全同意大家的认可答案,也就是依赖关系应该在外部管理。

但是在某些情况下,如果你真的需要搞一个像是自给自足的东西,你可以试试下面的做法:

import os

try:
  import requests
except ImportError:
  print "Trying to Install required module: requests\n"
  os.system('python -m pip install requests')
# -- above lines try to install requests module if not present
# -- if all went well, import required module again ( for global access)
import requests
45

安装问题和源代码没有关系!

你需要在你的包的 setup.py 文件里正确地定义你的依赖项,使用 install_requires 这个配置。

这样做才是对的……因为如果因为 ImportError 去安装东西,那就有点奇怪和让人害怕。别这么做。

撰写回答