使用 python 子进程检查 pip 是不是安装在 Windows 上

Posted

技术标签:

【中文标题】使用 python 子进程检查 pip 是不是安装在 Windows 上【英文标题】:Check if pip is installed on Windows using python subprocess使用 python 子进程检查 pip 是否安装在 Windows 上 【发布时间】:2018-11-23 10:44:39 【问题描述】:

我正在使用 python 来检查系统上是否安装了 pip。 我写的代码是:

subprocess.run(["pip"],shell=True)

我收到以下错误:

'pip' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

我已经尝试通过我的系统环境来运行使用

env = os.environ.copy()
subprocess.run(["pip"],shell=True,env=env)

但仍然没有运气。 我使用 get-pip.py 在我的 Windows 机器上安装了 pip

【问题讨论】:

【参考方案1】:

如果CreateProcesssubproces.run 调用)不将 pip 识别为命令,它可能会识别 python?所以你可以这样做:subprocess.run(['python3', '-m', 'pip']) 也许?

【讨论】:

谢谢@Alper。我刚刚意识到我的命令在 IntelliJ ide 中不起作用,但在 cmd 中起作用。甚至您的命令也可以在 cmd 中运行。有什么我可以做的,以便我可以在 IDE 中看到结果吗? 取决于 IntelliJ 在什么样的环境中运行它。我周围没有副本。'【参考方案2】:

您需要将 pip 安装路径添加到 PATH 系统变量中。输入 echo $PATH$ 检查它是否已经存在。

【讨论】:

PATH 上没有任何内容。我通过转到 System>Environment Variables 并编辑和添加来手动设置 PATH 变量。 python 在那里,但当我回显 $PATH$ 时,即使它也没有出现。我可以在 cmd 上调用 pip 和 python。【参考方案3】:

在 Windows 上,pip 不一定会在PATH 环境变量中,因此简单运行pip 可能找不到它。

如果pip安装在当前运行的Python中,你应该可以导入它的模块:

pip_present = True
try:
    import pip
except ImportError:
    pip_present = False

如果你想使用subprocess 运行它,你可以使用sys 中的东西来获取它相对于当前运行的Python 的通常位置:

pip_path = os.path.join(os.path.dirname(sys.executable), "Scripts", "pip.exe")
subprocess.run([pip_path])

【讨论】:

我想知道是否有更规范的方法来获取当前解释器的 Python bin/Scripts 目录的路径(因为名称取决于操作系统。)

以上是关于使用 python 子进程检查 pip 是不是安装在 Windows 上的主要内容,如果未能解决你的问题,请参考以下文章

如何为python安装子进程模块?

检查是不是安装了python

有没有办法检查子进程是不是仍在运行?

检查 python 中正在运行的子进程的标准输出

使用pip安装Python包

NodeJs - 检查子进程是不是成功启动