如何自动安装缺失的Python模块?
我想能够这样写:
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
去安装东西,那就有点奇怪和让人害怕。别这么做。