有没有办法让python程序告诉用户它需要一个模块才能运行,然后程序可以为用户安装它
5 回答
你可以捕获 ImportError 异常来告诉用户程序需要某个模块;
try:
import numpy as np
except ImportError:
print "This program requires numpy!"
print "Please download it from http://numpy.scipy.org/ and install it"
print "before running this program."
exit(1)
请注意,这只是一种以更好的方式退出程序的方法,而没有用户可能不清楚的回溯。如果找不到模块,无论如何都会引发异常。
您应该只对不属于 python 标准库的模块执行此操作。
尝试自动安装它不是一个好主意。首先是因为它是一种安全风险(传播恶意软件的好方法),其次是因为不同的操作系统或发行版具有不同的处理和注册软件安装的方法。
您可以创建一个尝试加载特定模块的函数,如果无法加载,则为用户提供手动下载的说明,或者您可以编写脚本以自动下载模块。
这并不能准确回答您的问题,但我认为这可能是您想要做的事情的答案。如果可能,我建议不要编辑用户已安装的模块,如果您只需要它们来运行脚本,那么您应该真正考虑PyInstaller,它将您的程序捆绑到 .exe 文件中。
如果您正在制作一个设置脚本来配置某人的机器,这显然是行不通的,但否则它可能是个好主意。
这很容易,但由于并非所有用户都会在他们的系统中安装 python 或 pip,因此它不适用于每个系统。代码是-
import os
os.system('<command here>')
os.system('pip install numpy')
它会工作...
您可以使用
import os
os.system('[sudo] [install whatever]')
安装您需要的任何模块...如果它还没有管理员权限,它将提示用户输入管理员密码
http://forums.devshed.com/python-programming-11/running-bash-command-110687.html
编辑:
根据下面 Matthew Trevor 的建议,您还可以尝试将依赖项添加到 setup.py,如本文所述http://www.siafoo.net/article/77