【问题标题】:python script to check if module is present else install modulepython脚本检查模块是否存在否则安装模块
【发布时间】:2017-01-27 19:24:22
【问题描述】:

我有这个简单的 Python 脚本。我想在运行它之前包含某种条件来检查 Python 模块(在我下面的示例subprocess 中)。如果该模块不存在,请安装该模块,然后运行该脚本。如果该模块存在,请跳过该模块的安装并运行该脚本。我在网上看到的大多数类似情况都在苦苦挣扎。

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

【问题讨论】:

  • subprocess 内置于 2.7 和 3.x。它被添加到2.4。您不应尝试将其安装在 2.4 或更高版本的任何设备上。
  • 这听起来像是一件可疑的错误事情。您可能应该将需要安装的库列为应用程序的依赖项。然后将在安装您的应用程序时安装它。为了安装库,您的脚本需要超级用户访问权限,这是一个安全风险。除此之外,您会使用哪种安装方法? pip, conda, git 结帐 & setup.py?你还会用virtual env吗?
  • 我只是以subprocess 为例来简化我的问题。实际的模块是 pycurl。我希望脚本仅在安装 pycurl 时运行。如果没有安装,则通过 pip 安装然后执行。
  • 感谢 Paul- 该脚本是在我的 linux 服务器上运行的一个简单脚本。我只想检查是否安装了pycurl,如果没有,安装pycurl,导入然后运行脚本。如果已经安装了pycurl,导入pycurl,然后运行脚本。
  • stackoverflow.com/a/38576759/5334188 看看这个,这可能会有所帮助

标签: python python-2.7


【解决方案1】:

您可以通过以下方式检查是否安装了 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 http://stackoverflow.com/questions/7271082/how-to-reload-a-modules-function-in-python
import pycurl
. . . .
# better option:
print 'just installed pycurl, please rerun this script at your convenience'
sys.exit(1)

【讨论】:

  • 谢谢 2ps。正是我需要的。
  • 如果 pycurl 软件包的安装方式依赖于在 site-packages 目录中更新/创建的 .pth 文件,这将不起作用。这是因为.pth文件指定的目录通常会在Python启动时添加到sys.path。如果它以需要.pth 文件的方式安装,您仍然会丢失找到该模块的路径。所以它可能有效,也可能无效。真的取决于模块的安装方式。
  • 谢谢哥们,很惊讶这没有更多的赞成票。我认为这仍然被认为是最佳做法?
  • 我不能说这是否是最佳实践,但它肯定是我在生产中使用过的东西。
猜你喜欢
  • 2012-03-09
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多