当 pip freeze & reinstalling 表示模块已安装时,为什么 venv Python 解释器会说“没有名为 __ 的模块”?

当 pip freeze & reinstalling 表示模块已安装时,为什么 venv Python 解释器会说“没有名为 __ 的模块”?

这是我第一次使用 venv 进行 Python 编程;因此我认为我的困难就来自于此。

我已经关注这些说明创建我的虚拟环境;它似乎运行得很完美。

接下来我跟着本文但很快就遇到了麻烦。命令“pip install __”有效;但奇怪的是,PowerShell 在列出“已成功安装...”后似乎挂断了,按下回车键并不断敲击键盘没有任何作用;我不得不关闭 PowerShell 窗口。等待似乎也没有任何作用。

发生那件事之后,我想我弄坏了一些东西,所以我尝试重新安装模块;在这种情况下,首先安装 matplotlib,然后安装 nmap,只是因为 nmap 是我真正想要使用的。

两者都返回了“成功”安装后挂断的某些变体“要求已满足:[此处有安装路径的详细信息]”

我的 matplotlib 输出,例如:

Requirement already satisfied: matplotlib in c:\users\admin\environments\python1\lib\site-packages (3.1.1)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\admin\environments\python1\lib\site-packages (from matplotlib) (1.1.0)
Requirement already satisfied: numpy>=1.11 in c:\users\admin\environments\python1\lib\site-packages (from matplotlib) (1.17.2)
Requirement already satisfied: cycler>=0.10 in c:\users\admin\environments\python1\lib\site-packages (from matplotlib) (0.10.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\users\admin\environments\python1\lib\site-packages (from matplotlib) (2.4.2)
Requirement already satisfied: python-dateutil>=2.1 in c:\users\admin\environments\python1\lib\site-packages (from matplotlib) (2.8.0)
Requirement already satisfied: setuptools in c:\users\admin\environments\python1\lib\site-packages (from kiwisolver>=1.0.1->matplotlib) (40.8.0)
Requirement already satisfied: six in c:\users\admin\environments\python1\lib\site-packages (from cycler>=0.10->matplotlib) (1.12.0)

奇怪的是,它也挂断了。不过,它似乎表明该包已成功安装。

“pip freeze” 也支持这些模块安装正确的想法;并且在我的 venv 中也是如此:

(python1) PS C:\Users\Admin\Environments> pip freeze
cycler==0.10.0
kiwisolver==1.1.0
matplotlib==3.1.1
nmap==0.0.1
numpy==1.17.2
pyparsing==2.4.2
python-dateutil==2.8.0
six==1.12.0

所以再说一次,我以前从未使用过 venv 来编程 - 我现在只需要使用 nmap 模块并使用一些简单的网络脚本;但据我所知,使用虚拟环境进行编码是行业标准的方式;因此我希望正确完成这个过程。

我正在运行 Python 3.7.4;并且 Python 已成功添加到 PATH,通过在命令提示符中输入“python”进行确认 - 但据我所知,这并不重要,因为项目的每个 venv 都是独立的。

非常感谢任何人提供的任何形式的启发。

答案1

请注意,以下答案相对笼统。请随时提出具体问题、澄清等。

当 pip freeze & reinstalling 表示模块已安装时,为什么我的 venv Python 解释器会说“没有名为 __ 的模块”?

就像 Python 解释器一样,系统上可以pip安装多个版本的(每个版本与不同的解释器相关联)。此错误通常表示您使用的版本pip安装了与您正在使用的解释器当前版本不关联的模块。


另一种解释是,Python 已安装到C:\Programs FilesC:\Program Files(x86)另一个特殊的 Windows 文件夹中,这导致查找模块时出现问题。


我还要补充一点,从广义上讲,Powershell 可能不是使用 Python 的最佳方式。它似乎可能会引入一些原本不存在的问题。

“pip freeze” 也支持这些模块安装正确的想法;并且在我的 venv 中也是如此[.]

import nmap然后,当您的虚拟环境被激活时,您应该能够执行以下操作:

(python1) PS C:\Users\Admin\Environments> python
>>> import nmap
>>>

如果您没有看到(python1)ie just PS C:\Users\Admin\Environments>,那么您没有使用python与您的虚拟环境相关联的解释器,并且可能会收到“没有名为 __ 的模块”错误。

也许还值得一提的是,Python 虚拟环境每次激活仅与一个终端实例(、等)相关cmdpowershell

我觉得我破坏了某些东西,所以我尝试重新安装模块;在这种情况下,首先安装 matplotlib,然后安装 nmap,只是因为 nmap 是我真正想要使用的。

这里有两个小点:

  • 当前版本的 matplotlib 似乎在 Windows 上使用 Python 3.7.4 时存在问题,至少在某些情况下是这样(特别是导致 Python 解释器崩溃)。

  • nmap似乎没有matplotlib先决条件(据我所知)。

相关内容