Python脚本:检查模块是否存在,否则安装模块。

3

我有一个简单的Python脚本。 我想包含某种条件,以检查Python模块(在我的示例中为subprocess)是否存在,然后再运行它。 如果该模块不存在,则安装该模块并运行脚本。 如果该模块存在,则跳过安装该模块并运行脚本。 我正在努力解决我在网上看到的大多数类似场景。

import subprocess
ls_output = subprocess.check_output(['ls'])
print ls_output

1
subprocess 已经内置于 2.7 和 3.x 版本中。它在 2.4 版本中被添加。您不应该尝试在任何 2.4 或更新的版本上安装它。 - Brian Cain
这听起来像一个可疑的错误操作。您应该将所需的库安装为应用程序的依赖项,然后在安装应用程序时自动安装它。为了安装库,您的脚本需要超级用户访问权限,这是一种安全风险。除此之外,您会使用哪种安装方法?pipcondagit checkout 和 setup.py?另外,您会使用虚拟环境吗? - Paul Rooney
我只是举例使用了 subprocess 来简化我的问题。实际模块是 pycurl。我希望脚本仅在安装了 pycurl 的情况下运行。如果没有安装,则通过 pip 安装后再执行。 - jebjeb
谢谢Paul- 这个脚本是在我的Linux服务器上运行的简单脚本。我只想检查是否安装了pycurl,如果没有,则安装pycurl,然后导入并运行脚本。如果已经安装了pycurl,则导入pycurl,然后运行脚本。 - jebjeb
请查看此链接:http://stackoverflow.com/a/38576759/5334188,这可能会有所帮助。 - be_good_do_good
1个回答

4

以下是如何检查是否安装了pycurl:

# if you want to now install pycurl and run it, it is much trickier 
# technically, you might want to check if pip is installed as well
import sys
import pip

def install(package):
    pip.main(['install', package])

try:
    import pycurl
except ImportError:
    print 'pycurl is not installed, installing it now!'
    install('pycurl')

# not recommended because https://dev59.com/WGw05IYBdhLWcg3wYw5s
import pycurl
. . . .
# better option:
print 'just installed pycurl, please rerun this script at your convenience'
sys.exit(1)

谢谢2ps。正是我所需要的。 - jebjeb
如果“pycurl”包的安装方式依赖于在“site-packages”目录中更新/创建“.pth”文件,则此方法将无效。这是因为“.pth”文件指定的目录通常会在Python启动时添加到“sys.path”中。如果以需要“.pth”文件的方式安装了模块,则仍将缺少找到该模块的路径。因此,它可能有效,也可能无效。这取决于模块的安装方式。 - Graham Dumpleton
谢谢伙计,惊讶这个帖子没有更多的赞。我认为这仍然被视为最佳实践? - Umar.H
我不能说这是最佳实践,但它肯定是我在生产中使用过的东西。 - 2ps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接