我应该使用pip.main()或subprocess.call()来调用pip命令吗?

tur*_*nip 9 python subprocess pip

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

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

方法1: pip.main()

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

方法2: subprocess.call()

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

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

Kev*_*vin 9

一般来说

main()除非你想让他们拥有这个过程,否则不要打电话给别人.例如,他们可以打电话sys.exit()或其中一个os.exec*()功能.他们还可以安装信号处理程序,更改umask,或对进程的状态进行各种其他全局更改.如果您不希望它们执行此类操作,则应在子进程中运行其代码.

(当然,库代码可以很容易地完成上述所有操作,但是在没有记录它的情况下这样做被认为是"粗鲁",而main()函数的作者通常假设他们自己拥有整个过程.)

特别是Pip

pip.main()不是公共接口,不受支持.使用子流程.