python - 我应该使用 pip.main() 还是 subprocess.call() 来调用 pip 命令?

标签 python pip subprocess

我正在编写一个需要使用 pip 安装依赖项的程序。正确的做法是什么?为什么?

理想情况下,它需要与平台无关,但该程序将在 Linux 机器上运行。

方法一:pip.main()

import pip
args = ['param1', 'param2']
version = 0.1
package = ['some_package=={}'.format(version)]
pip.main(['install'] + args + package) 

方法二:subprocess.call()

import subprocess
import sys
version = 0.1
package = 'some_package'

subprocess.call([sys.executable, '-m', 'pip', 'install', '{}=={}'.format(package, version)])

最佳答案

一般情况

不要调用别人的 main() 除非你想给他们进程的所有权。例如,它们可以调用 sys.exit()os.exec*() 函数之一。他们还可以安装信号处理程序、更改 umask 或对您的进程状态进行各种其他全局更改。如果您不希望他们做这样的事情,您应该改为在子进程中运行他们的代码。

(当然,库代码可以同样轻松地完成上述所有操作,但如果不记录就这样做被认为是“粗鲁的”,而 main() 函数的作者通常假设他们拥有自己的整个过程。)

特别是对于 Pip

pip.main() is not a public interface ,不受支持。使用子流程。

关于python - 我应该使用 pip.main() 还是 subprocess.call() 来调用 pip 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059526/

相关文章:

python - 如何从 Python 启动命令窗口

python - CollabNet 的 python svn 绑定(bind)的替代方案是什么?

python - 如何使用 python pandas 在本地系统 Jupyter Notebook 中读取两个较大的 5GB csv 文件?如何在本地连接两个数据框进行数据分析?

python - 尝试创建应作为命令行脚本工作的自定义包时出现 ModuleNotFoundError

python-3.x - Ubuntu 21.04、Virtualenv 及其 Python 配置

python - 使用 Python 3 和终端检索蓝牙设备列表

python - 如何通过多列函数对 Pandas 行进行分组

python - OpenERP 模块 xml ValidateError

python - 如何使用 pip 安装最新版本的 Django 1.5?

go - golang程序退出后如何保持子进程运行?