如何从需要它的脚本中安装缺少的 python 包?

新手上路,请多包涵

假设您已经在 python 发行版上安装了 pip 或 easy_install,我想知道如何从脚本本身中的用户目录中安装所需的包。

据我所知,pip 也是一个 python 模块,因此解决方案应该如下所示:

 try:
    import zumba
except ImportError:
    import pip
    # ... do "pip install --user zumba" or throw exception   <-- how?
    import zumba

我缺少的是从 python 内部执行“pip install –user zumba”,我不想使用 os.system() 来执行此操作,因为这可能会产生其他问题。

我认为这是可能的……

原文由 sorin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 531
2 个回答

更新了较新的 pip 版本 (>= 10.0):

 try:
    import zumba
except ImportError:
    from pip._internal import main as pip
    pip(['install', '--user', 'zumba'])
    import zumba

多亏了@Joop,我才能够想出正确的答案。

 try:
    import zumba
except ImportError:
    import pip
    pip.main(['install', '--user', 'zumba'])
    import zumba

一个重要的评论是,这将在不需要 root 访问权限的情况下工作,因为它将在用户目录中安装模块。

不确定它是否适用于二进制模块或需要编译的模块,但它显然适用于纯 python 模块。

现在您可以编写自包含的脚本,而不必担心依赖性。

原文由 sorin 发布,翻译遵循 CC BY-SA 4.0 许可协议

从 pip 版本 >= 10.0.0 开始,由于内部包重组,上述解决方案将不起作用。在脚本中使用 pip 的新方法如下:

 try: import abc
except ImportError:
    from pip._internal import main as pip
    pip(['install', '--user', 'abc'])
    import abc

原文由 Phoenix 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题