我正在编写一个需要使用 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/