如何从 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,我认为 subprocess
和 os.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 的
获取错误 - AttributeError:'module'对象在运行subprocess.run时没有属性'run'([“ls”,“ - l”])