尽管多次尝试添加到 PATH,Python 仍拒绝在命令提示符中被识别

1 python path command-line environment-variables pip

我已经下载并卸载了Python很多次,试图让它发挥作用。无论发生什么我总是得到:

\n
\n

“\'python\' 不被识别为内部或外部命令、可操作程序或批处理文件。”

\n
\n

我想做的就是用 PIP 下载新模块。我\xe2\x80\x99已经尝试过很多论坛上的建议。

\n

我的环境变量在用户变量和系统变量中都有这个:

\n
\n

“C:\\Users\\Owner\\AppData\\Local\\Programs\\Python\\Python38-32\\Scripts”

\n
\n

没有任何效果。电脑已经重启过很多次了。Python重新下载了很多次。从来没有工作过。

\n

即使在自主的 WinPython 命令行和 IDLE 中,我也无法在其命令行中访问 python。

\n

添加了我的环境变量和命令提示符响应的图片

\n

Ana*_*man 5


免责声明:

  • 以下建议假设您已在系统上独立安装 Python,而不是作为任何其他程序安装的必需部分。

  • python.org它假设您使用的是来自 Windows 应用商店的“vanilla”Python ,而不是任何专门的 Python 包或 Python。

  • 据我所知,这不会影响 WSL 下的 Python,但这只是一个假设。

  • 下面的建议是通用的,听起来您可能至少尝试过其中的一些建议,但覆盖所有基础通常是好的。=)


一般建议

删除现有的环境变量

删除屏幕截图中所有对 Python 的环境变量引用。这包括:

  • C:\Users\Owner\AppData\Local\Programs\Python\Python38\ScriptsPATH以及您的 User变量下的任何其他引用

以及系统中的所有引用Path(如屏幕截图所示):

  • C:\Windows;C:\Windows\System32;C:\Python39
  • C:\Users\Owner\AppData\Local\Programs\Python\Python39
  • C:\Users\Owner\AppData\Local\Programs\Python\Python38
  • C:\Users\Owner\AppData\Local\Programs\Python\Python38\Scripts

充其量,只有其中两个可以直接从命令行运行(您的 Python39 参考之一python和您的 Python38Scripts参考之一pip),并且这些甚至与同一安装无关,因此它们无法一起工作以正确安装模块。

如果您想保留一般C:\Windows;C:\Windows\System32;C:\Python39条目,这取决于您,但您应该删除该C:\Python39部分。也就是说,我相信在这种情况下C:\WindowsC:\Windows\System32可能是多余的,因为它们可能应该分别由%SystemRoot%和覆盖%SystemRoot%\system32


请注意,您当然可以将删除的条目保留在一边(例如在记事本中),以防出现问题,但总的来说,除非另一个程序依赖它们,否则您当前的布局通常不是处理 Windows 上多个 Python 安装的方式。


重新添加一个安装

有两种方法可以解决这个问题。首先,您可以简单地选择您想要从命令行访问的现有安装并将其添加回您的环境变量(我建议使用您的 SystemPath变量而不是 User PATH)。所以:

C:\Python39
C:\Python39\Scripts
Run Code Online (Sandbox Code Playgroud)

或者:

C:\Users\Owner\AppData\Local\Programs\Python\Python39
C:\Users\Owner\AppData\Local\Programs\Python\Python39\Scripts
Run Code Online (Sandbox Code Playgroud)

或者:

C:\Users\Owner\AppData\Local\Programs\Python\Python38
C:\Users\Owner\AppData\Local\Programs\Python\Python38\Scripts
Run Code Online (Sandbox Code Playgroud)

在测试之前pythonpip从命令行重新启动。

如果由于某种原因这不起作用(或者您想确保将来出现的潜在问题数量最少),我建议您从文件夹中(再次)卸载 PythonC:\Python39以及 Python 的两个副本(3.8 和 3.9)Users

然后,从命令行选择一个 Python 副本作为主要安装,并尝试遵循我为另一个问题编写的这些安装指南。我会特别注意使用自定义文件夹并避免使用C:\Programs Files,C:\Program Files (x86)Users此安装中的任何内容(这些都可能会导致问题)。

笔记

  • 如果您愿意,您可以稍后向 Windows 添加更多 Python 安装。也就是说,虽然有多种方法可以从命令行一次使用多个 Python 版本,但从技术上讲,一次只能使用一个 Pythonpython版本pip

  • 请注意,Python 的行为与许多其他 Windows 程序不同,安装新版本不会“升级”以前的版本。您只需安装两个(或更多)Python。

  • 作为一般建议,Python 3.8 可能是目前安装的最佳 Python 版本,因为许多模块正在迁移到它。但是,为了获得模块的最大兼容性,您可能需要考虑 Python 3.7(当前版本为 3.7.7)。我想说 Python 3.9 目前可能没有很多可用的模块,因此除非您有令人信服的理由来安装它,否则在撰写本文时它可能不是最佳选择。


编辑

有没有办法只下载新包而不使用 pip?

是的。但公平的警告是,虽然某些模块安装起来很简单(假设您打算这样做),但其他模块可能相对耗时(或更糟)。

访问的模块pip都是从Python Package Index下载的。那里托管的每个“项目”(模块)都有一个单独的页面,其中包含Download filesPyPI 上托管的文件的链接,并且(可能)Download如果作者提供了从以下位置下载项目文件的备用源:

前任。PyPI 项目(模块)常规链接

PyPI 项目(模块)链接 - 屏幕截图

前任。PyPI 项目(模块)文件链接

PyPI 项目(模块)链接 - 屏幕截图

需要注意的是,虽然某些模块可能没有任何依赖项,但某些模块依赖其他模块才能正确运行。不幸的是,如果不进行额外的研究,发现模块可能具有哪些依赖关系并不总是那么容易。

另一个陷阱是相同模块的某些版本可能仅适用于某些平台(例如Linux,但幸运的是这些平台通常被适当标记)。

我想要的只是能够获得我的代码所需的最后模块,以便我可以将其发送出去[.]

pip可能是您现在想要尝试使用的最后一个工具,但需要明确的是,pip不必直接从命令行使用,因为只需pip(通过您的环境变量)即可用于正确收集或安装软件包。

根据您的评论,假设您选择pip使用 Python 3.7(pip.exe位于C:\Python37\Scripts)进行安装,您应该能够通过pip以下两种方式之一访问您的 Python 3.7 安装:

C:\Python37\python.exe -m pip example-command
Run Code Online (Sandbox Code Playgroud)

或直接作为:

C:\Python37\Scripts\pip.exe example-command
Run Code Online (Sandbox Code Playgroud)

对于 Windows 上的普通 Python,通常不需要环境变量即可实际运行python.exepip.exe成功安装单个 Python。

批量助手

只是一个想法,但如果您不介意输入长路径并且可以.bat从命令行执行(批处理)文件,您可能需要考虑创建一个“帮助器”批处理文件,例如:

前任。假pip.bat

C:\Python37\python.exe -m pip %*
Run Code Online (Sandbox Code Playgroud)

这可以让您更轻松地pip从其中包含该批处理文件的任何文件夹进行访问。


全面披露:如果您尝试执行 ex,仍然可能会出现与上面看到的类似的错误。在不fake-pip包含此批处理文件的目录中。

否则,只要您在命令行上工作的任何地方都小心保留此批处理文件,您就应该能够避免上面遇到的“未找到”问题。


fake-pip.bat 示例

例如,要使用 将模块安装到 Python 3.7 中fake-pip.bat,您应该能够在同一文件夹中打开命令窗口并使用:

fake-pip install module-name 
Run Code Online (Sandbox Code Playgroud)

将该模块正确安装到 Python 3.7 中。

请注意,如果您只想在 PC 上拥有该模块及其依赖项的副本(例如放在磁盘上并提供给其他人),您可以使用以下download选项pip

fake-pip download module-name1 module-name2 ...
Run Code Online (Sandbox Code Playgroud)

  • 非常好的答案。不仅仅是简单的解决方案(修复您的路径),而且还解释了为什么必须这样设置。 (2认同)