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

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

为了让它正常工作,我下载并卸载了 Python 很多次。无论发生什么,我总是得到:

“‘python’ 不被识别为内部或外部命令、可运行程序或批处理文件。”

我只想用 PIP 下载新模块。我已经尝试了很多论坛上的建议。

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

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

什么都没起作用。电脑重启了很多次。Python 重新下载了很多次。从来没起作用过。

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

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

答案1


免责声明:

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

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

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

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


一般建议

删除现有的环境变量

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

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

以及系统中的所有参考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 安装的方式。


添加一个安装返回

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

C:\Python39
C:\Python39\Scripts

或者:

C:\Users\Owner\AppData\Local\Programs\Python\Python39
C:\Users\Owner\AppData\Local\Programs\Python\Python39\Scripts

或者:

C:\Users\Owner\AppData\Local\Programs\Python\Python38
C:\Users\Owner\AppData\Local\Programs\Python\Python38\Scripts

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

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

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

笔记

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

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

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


编辑

有没有办法不用 pip 直接下载新软件包?

是的。但需要提醒的是,虽然某些模块的安装可能很简单(假设您打算这样做),但其他模块的安装可能相对耗时(甚至更糟)。

访问的模块pip都是从Python 包索引。托管在那里的每个“项目”(模块)都有一个单独的页面,其中包含托管Download files在 PyPI 上的文件的链接,并且(可能)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

或者直接为:

C:\Python37\Scripts\pip.exe example-command

使用 Windows 上的原始 Python,通常不需要环境变量来实际运行python.exepip.exe成功安装单个 Python。

批处理助手

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

例如 fake-pip.bat

C:\Python37\python.exe -m pip %*

这可以使您更轻松地访问pip包含该批处理文件的任何文件夹。


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

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


fake-pip.bat 示例

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

fake-pip install module-name 

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

请注意,如果您只是希望在您的电脑上保留模块及其依赖项的副本(例如,放在磁盘上并交给其他人),那么您可以使用以下download选项pip

fake-pip download module-name1 module-name2 ...

答案2

清理(​​卸载)系统中所有 Python 安装。如有必要,请使用 RegEdit。

然后安装 Anaconda Navigator 发行版。确保将其安装在目录“C:\ProgramData\Anaconda3”中(以 Windows 管理员身份)。然后使用 conda 创建所有虚拟环境。使用 Anaconda 附带的“conda”作为集中式虚拟环境管理器。它更简洁,默认情况下将所有环境存储到“C:\ProgramData\Anaconda3\envs”目录中(如果配置正确)。

如果您仍然想使用 pip / venv,那么请在 conda 环境中安装 conda 和 pip 包,但请遵循以下说明:pip 和 conda 结合使用的最佳指南在这里:同时使用 conda 和 pip

同时使用 PIP 和 CONDA 时请注意:

小心“并行”使用 pip 和 conda。它们各自构建和管理自己的包索引。互操作性仍是一项“实验性功能”。您可以尝试 conda 的互操作性功能。conda 和 pip 互操作性

我通常会先将 conda 和 pip 包安装到任何新的 conda 环境中(在命令行中使用“conda install -c conda-forge conda pip”)。之后,conda 会收到有关 pip 包安装的信息。我发现,当我这样做时,pip 破坏我的 conda 环境的频率会降低。

有关在 conda 环境中使用 pip 的更多信息,请参阅以下文档。conda 和 pip 互操作性

带有 venv 的 Pip 可能会弄乱您的系统,因为它会让您在整个文件系统中“pip-poop”venv 环境,就像阁楼上到处都是啮齿动物的粪便一样。pip 会将“venv”虚拟环境放在您当时所在的任何目录中。pip 没有集中式环境管理器,我讨厌这一点,因为我会忘记它们放在哪里,然后我的系统就会变得杂乱无章,存储丢失在未集中管理的旧 venv 文件夹中。我更喜欢让 conda 自动化管理,通过在一个地方集中、跟踪和管理它们。conda 环境和包管理器节省了我的时间,提高了工作效率,并更有效地利用了我的电脑。

相关内容