【问题标题】:Install module before import导入前安装模块
【发布时间】:2016-05-12 20:06:46
【问题描述】:

我想知道我的 python 脚本是否可以在尝试导入模块之前安装它。当我现在运行我的脚本时,它会尝试导入模块(当然),但我希望它安装模块,然后检查它是否可以导入它。

更新 1

这是我想在运行脚本时使用的安装脚本:

def install():
print("\nChecking for dependencies, please stand by...")
with hideInfo():
    if str(os.name) == 'nt':
        easy_install.main(['textract'])
        pip.main(['install', 'logging'])
        pip.main(['install', 'datetime'])
    else:
        pip.main(['install', 'textract'])
        pip.main(['install', 'logging'])
        pip.main(['install', 'datetime'])

time.sleep(1)
menu()

【问题讨论】:

标签: python import module installation


【解决方案1】:

当然。

  1. Install programmatically,然后尝试导入(而不是从命令行安装)

  2. 只需在现有安装脚本的末尾添加一条导入语句(如果它已经是程序化的)


# normal installation routine
try:
    import foobar        
except ImportError:
   panic()
  1. Call an external install command in python(例如 sudo apt-get install python-foobar)

需要考虑的事项

  • 通常,要安装软件包,您需要提升权限或 sudo 权限。您可能不希望 Python 运行时的其余部分也拥有这些功能,因此单独安装可以避免危险(例如,如果您正在处理文件)
  • 如果失败,大多数安装脚本都会报告。做额外的检查本身并没有什么用处。
  • 在未经他人许可的情况下安装东西可能会让他们很恼火。如果您要分发此脚本,我建议您不要这样做。我不希望我下载的包覆盖我的 numpy 发行版,因为它认为这是个好主意
  • 如果您将其安装到本地目录,然后尝试从本地目录导入,这不一定能很好地表明已安装的软件包可以从您的整个计算机访问。这可能是也可能不是问题

【讨论】:

  • 感谢您的回答,我不是 100% 确定您的意思。但是我用我的安装功能更新了我的帖子。我在 main 中调用了这个函数。
【解决方案2】:

我以不同的方式修复它。我使用了一个名为“importlib”的模块。有了这个,我可以尝试导入模块,如果它不起作用,请安装它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2019-05-08
    • 2021-11-01
    相关资源
    最近更新 更多