答案1
免责声明:
以下建议假设您已经在系统上独立安装了 Python,而不是作为任何其他程序安装的必需部分。
它假定您使用的是“原始”Python
python.org
,而不是任何专门的 Python 捆绑包或来自 Windows 应用商店的 Python。据我所知,这不会影响 WSL 下的 Python,但这只是假设。
下面的建议是通用的,听起来你可能至少尝试过其中的一些,但涵盖所有基础通常更好。=)
一般建议
删除现有的环境变量
删除屏幕截图中所有对 Python 的环境变量引用。其中包括:
C:\Users\Owner\AppData\Local\Programs\Python\Python38\Scripts
PATH
以及你的用户变量下的任何其他引用
以及系统中的所有参考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:\Windows
和C:\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
测试之前python
或pip
从命令行重新启动。
如果由于某种原因这不起作用(或者您想确保将来的潜在问题数量最少),我建议从C:\Python39
您的文件夹中卸载 Python(再次)和 Python 的两个副本(3.8 和 3.9)Users
。
之后,从命令行选择一个 Python 副本作为主要安装,并尝试执行以下操作安装指南我写了另一个问题。我特别注意使用自定义文件夹并避免在此安装中使用C:\Programs Files
或C:\Program Files (x86)
下的任何内容Users
(这些都可能导致问题)。
笔记
如果您愿意,可以稍后将更多 Python 安装添加到 Windows。也就是说,虽然有方法可以从命令行一次使用多个 Python 版本,但从技术上讲,一次只能使用一个 Python
python
版本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 项目(模块)文件链接
需要注意的是,虽然有些模块可能没有任何依赖项,但有些模块依赖其他模块才能正常运行。不幸的是,如果不进行额外研究,并不总是很容易发现模块可能具有哪些依赖项。
另一个缺陷是,同一模块的某些版本可能仅适用于某些平台(例如 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.exe
或pip.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 环境和包管理器节省了我的时间,提高了工作效率,并更有效地利用了我的电脑。