我已经使用 pip 安装了模块 pyaudio。但是,当我尝试导入它时,Python 说找不到该模块:
C:\Users\hp>pip install pyaudio
Requirement already satisfied: pyaudio in c:\users\hp\appdata\local\programs\python\python37\lib\site-packages (0.2.11)
>>> import pyaudio
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pyaudio'
为什么Python找不到安装的模块?
(我使用的是 Python 3.7。)
请您参考如下方法:
经常有人使用 pip 安装 Python 包,但似乎无法在 Python 中导入它。要了解发生这种情况的原因,您必须知道 Windows 如何找到要运行的可执行文件,以及如何安装 Python 软件。基础知识:
- 运行命令时,Windows 会在环境变量 PATH 中搜索可执行文件。它执行找到的第一个。
- Python 解释器,
python.exe, 安装在<PYTHON_INSTALL_DIR>(例如C:\Python\3.7)。 - Python 工具,例如
pip,pylint,virtualenv,PyCrust等,安装在<PYTHON_INSTALL_DIR>\Scripts. - 适用于 Windows 的 Python 启动器,
py.exe, 安装在您的 Windows 系统目录中(例如C:\Windows)。 -
python和pip命令使用在其安装目录中找到的模块,它们不查看 PATH。
那么,假设您有以下 Python 版本:
C:\Python\2.7
C:\Python\3.6
C:\Python\3.7
并且您的 PATH 环境包含以下目录:
C:\Python\2.7
C:\Python\3.6\Scripts
然后,查看以下输出:
C:\>python -V
Python 2.7.16
C:\>pip -V
pip 19.1.1 from c:\python\3.6\lib\site-packages\pip (python 3.6)
C:\>py -V
Python 3.7.3
所以,当运行 pip ,这些包可能安装在另一个 Python 版本中,然后是您在运行时获得的版本 python .
要查看系统上(正确)安装了哪些版本,请运行 py -0p .示例输出:
C:\>py -0p
Installed Pythons found by py Launcher for Windows
-3.7-64 C:\Python\3.7-64\python.exe *
-3.7-32 C:\Python\3.7-32\python.exe
-3.6-64 C:\Python\3.6-64\python.exe
-2.7-64 C:\Python\2.7-64\python.exe
-2.7-32 C:\Python\2.7-32\python.exe
通用解决方案(适用于 Windows)
最好不要依赖你的系统路径。使用 py启动器选择你想要的版本。运行 pip对应你要使用的Python版本的模块,开始pip作为模块而不是可执行文件。 所以不是:
pip install <package>
运行:
py -3.6 -m pip install <package>
要查看您为该 Python 版本安装了哪些 Python 包,请使用:
py -3.6 -m pip freeze
一些补充说明
- 是否将 Python 安装添加到您的 PATH,是安装过程中的一个选项。如果添加,则添加在PATH的开头,所以会优先选择最近安装的Python版本。
- Windows 系统目录应该始终在您的 PATH 中,因此
py命令将始终可用,即使您没有将任何 Python 安装添加到您的 PATH。 - 如果您从 Windows 资源管理器双击 .py 文件,或在命令提示符中直接键入文件名作为命令(例如
test.py),则操作由 Windows 注册表确定。文件可能会在您的 IDE 中打开,或者使用 Python 解释器执行。在这种情况下,它可能是最近安装的 Python 版本。命令python test.py可能是, 使用与命令test.py不同的 Python 版本. - 一些安装还包括名为
python2的可执行文件/python3(不在 Windows 上),pip3/pip3.7(也在 Windows 上)等。这也允许您指定要使用的版本。这些对于存在这些二进制文件并位于路径中的系统很有用。
