如何从 subprocess.run() 运行 pip install 命令 [重复]

Posted

技术标签:

【中文标题】如何从 subprocess.run() 运行 pip install 命令 [重复]【英文标题】:How to run a pip install command from a subproces.run() [duplicate] 【发布时间】:2021-11-19 13:23:07 【问题描述】:

我在这篇文章中看到:making and automatic python installer 你可以使用:

subprocess.run('pip install module_name')

subprocess.run('pip install -r requirements.txt')

以这种格式单独安装模块或形成一个文件。但是当我运行这个命令时,我得到了这个错误:

FileNotFoundError: [Errno 2] No such file or directory:

有没有办法这样运行而不必这样做:

subprocess.run(['pip', 'install', 'module_name'])

【问题讨论】:

你错了path。检查您是否确实位于文件requirements.txt 所在的路径中。 不,我在同一个目录中。它对你有用吗? 也许可以试试:subprocess.run("python -m pip install -r requirements.txt")os.system("python -m pip install -r requirements.txt")。至少这对我有用。 我想使用 subprocess 库,因为它是推荐的更高级别的解决方案。所以你的意思是用双引号而不是单引号? ***.com/questions/12332975/…,尤其是。这个答案:***.com/a/50255019/7976758 【参考方案1】:

我建议你坚持subprocess.run(['pip', 'install', '-r', 'requirements.txt'])。引用subprocess docs。

提供一系列参数通常是首选,因为它允许模块处理任何所需的参数转义和引用(例如,允许文件名中的空格)。

如果您想在不同的系统上运行脚本,避免使用shell=True 将为您省去很多麻烦。不过,总的来说,我建议避免依赖 shell。毕竟,这就是您使用 Python 而不是 Bash 的原因。

【讨论】:

那你不觉得os.system 也可能是个好主意吗?它适用于 Windows 和 Linux,我认为 subprocessos.system 至少在安装 pip 模块方面没有太大区别。 我一直使用subprocess 可能是因为os.system docs 中的评论:“子进程模块提供了更强大的工具来生成新进程并检索它们的结果;使用该模块比使用更可取这个功能。” os.system 似乎类似于在 subprocess.run 中使用 shell=True,由于传递给 shell(例如 bash 或 cmd.exe),这让我感到不安 感谢您告诉我这件事!我肯定会阅读更多关于 subprocess 库的信息。【参考方案2】:

为了让它在 Linux 上运行,我使用了shell=True 参数。在 Windows 上,没有它,它也能完美运行。

subprocess.run("python -m pip install -r requirements.txt", shell=True)

找到答案here。

【讨论】:

以上是关于如何从 subprocess.run() 运行 pip install 命令 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中使用 subprocess.run() 运行 step-cli

将 subprocess.run 输出重定向到 jupyter notebook 的

如何抑制或捕获 subprocess.run() 的输出?

subprocess.run 无法调用可执行文件 [重复]

获取错误 - AttributeError:'module'对象在运行subprocess.run时没有属性'run'([“ls”,“ - l”])

Pylint和Subprocess.Run返回退出状态28