【问题标题】:Python `no module pip.__main__;` error when trying to install a modulePython `no module pip.__main__;` 尝试安装模块时出错
【发布时间】:2015-04-24 04:53:46
【问题描述】:

我的 Raspberry Pi 出现以下错误:No module named pip__main__; 'pip' is a package and cannot be directly executed

当我在终端输入时:sudo python3 -m pip install mp3play

这是什么原因造成的,我该如何解决它以便我可以安装模块mp3play

【问题讨论】:

    标签: python pip


    【解决方案1】:

    解释:

    如果现有的 pip 模块在升级时可能会受到影响,就会发生这种情况。

    您可能会在site-packages 中观察到,任何必需的文件/文件夹都已重命名为带有前导~,例如pip 更改为~ip 或带有前导~ 的子文件夹。

    所以,在引用模块pip时,如果找不到所需的可执行文件。

    发生这种情况的原因是read:

    当卸载一个包时,pip 现在会将它重命名为一个名字 无法导入,一旦确认一切 将成功(包括安装新版本,如果它正在执行 升级),然后它才会删除这些文件夹。如果某事失败了, 它会将它们重命名。

    解决方案:

    除了解决方案by @Djib2011,您还可以使用全新安装 pip 模块:

    py <-version> -m ensurepip --upgrade
    

    其中&lt;-version&gt; 是一个可选参数,可以替换为您遇到问题的python 版本,例如-3.8

    Python 自带一个 ensurepip 模块,可以在 Python 环境中安装 pip。这将安装最初与您一直使用的 python 版本一起打包的 pip 模块。

    您可以运行升级命令将 pip 移植到较新版本的帖子。

    py <-version> -m pip install --upgrade pip
    

    如果你遇到任何EnvironmentError,你可以附加--user选项。

    参考:

    1. pip installation
    2. pip how to remove incorrectly installed package with a leading dash

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,以前的答案都没有为我解决。

      当我将 python 卸载并重新安装到我的 PC 时出现错误。看起来以前存在的 pip 版本并没有完全删除,当我尝试使用 python -m pip install package 导入它时,它实际上是在尝试调用以前的版本。

      首先要解决它手动删除以下位置的pip文件夹:

      C:\Users\username\pip
      C:\Users\username\AppData\Local\pip
      C:\Users\username\AppData\Local\Programs\Python\Python**\lib\site-packages\pip***
      C:\Python**\pip
      

      然后下载get-pip.py

      最后,导航到您下载它的文件夹并运行:

      python get-pip.py
      

      此过程应重新安装 pip 并解决问题。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题。我发现安装 python 2.7 时遗留了一个旧的 pip 目录,位于C:\Users\my-username\pip。这导致 python 尝试从那里加载 pip 并失败。

        我删除了那个目录,我的错误刚刚变成了No module named pip

        我还没有解决这个问题,但我正在http://bugs.python.org/issue29586解决它

        【讨论】:

          【解决方案4】:

          Pip 不仅是一个独立的可执行文件,它还是一个 python 模块。

          事实上,在 python 文档中,它直接建议使用-m 语法来使用 pip 安装包。

          https://docs.python.org/3.5/installing/index.html#basic-usage:

          标准的打包工具都设计为从命令行使用。

          以下命令将从 Python 打包索引中安装最新版本的模块及其依赖项:

          python -m pip install SomePackage
          

          我的猜测是您系统的pip(可执行文件)被pip 可执行文件的python2 版本所掩盖。但听起来你没有安装 pip (模块)以便你的 python3 可执行文件可以找到它,所以你可能需要专门重新安装 pip (模块)。

          为此,使用python3 -m ensurepip (docs for ensurepip) 如果从您的 python3 解释器的角度来看它不存在,它将安装 pip。

          另一个问题可能是它在您的当前目录中找到了一个名为 pip 的文件、可执行文件或目录,并且它试图将 pip 视为一个模块,它实际上不是一个模块。

          如果不是这样,我不确定。但这绝对不是因为 pip 不是模块。

          【讨论】:

          • 如果您尝试在没有提升权限的情况下在 Windows 中更新 pip C:\Python38\python.exe: No module named pip.__main__; 'pip' is a package and cannot be directly executed,如果您仅使用 python -m ensurepip,则会出现同样的问题,您会得到类似 ` [WinError 5] Access is denied: 'C:\\Python38\\Scripts\\pip3.exe' -> 'C:\\Python38\\Scripts\\pip3.exe.deleteme' 考虑使用--user 选项或检查权限。`我明白了仅在使用 python -m ensurepip --userpython -m pip install --upgrade pip --user 后才能工作
          【解决方案5】:

          pip 是一个独立的可执行文件。如果pip在你的路径中,你可以执行

          pip install mp3play
          

          如果pip不在你的路径中,那么你需要导航到pip所在的目录,然后执行上述操作。

          如果需要,将sudo 添加到命令中。

          您遇到的确切错误是由于pip 是一个包,但-m 用于执行模块。

          编辑:pip 还带有几个有用的别名函数,它们指向不同的 Python 安装。通常,pip 指向您的主要 Python 安装(您在执行 python 时输入的那个),pipV 其中V 是一个数字,例如23 将安装添加到您的主Python 版本 Vpip3 添加到您的 python3 环境中)。最后是pipV.S,其中V 和以前一样,S 是颠覆。例如 pip3.4 为 Python 3.4 安装。

          【讨论】:

          • 我已经尝试过pip install mp3play,并被告知 Python 2.7 的要求已经满足,但是我这样做的原因是sudo python3 -m pip install mp3play 是因为我想专门为 Python 3.x 安装它.
          • @TheHarpoon 添加了解释pip 版本的编辑。希望能帮助到你。 :)
          • @Sven 您可能在默认未安装pip 的环境中运行,或者您可能没有Python2。试试which pip 看看是否能给你带来任何结果。对我来说,pip 位于/usr/local/bin/pip,所以你也可以尝试在那里查看。
          • 我在 ubuntu12.04 中运行,在 /usr/local/bib/pip 中使用了 python3。我通过编辑文件解决了这个问题,直到下一次更新到来。非常烦人。我想我很快就会切换到 virtualenv。
          • @Sven,好吧,听起来你添加了 Python3。默认情况下为 Python3 添加了 pip。您可以通过添加包python-pippython3-pip 来解决您的问题。 Virtualenv 绝对是管理多个 Python 安装的好方法,pip 将与它很好地集成。