繁体   English   中英

文件“/usr/bin/pip”,第 9 行,在<module> from pip import main ImportError: 无法导入名称 main

[英]File “/usr/bin/pip”, line 9, in <module> from pip import main ImportError: cannot import name main

我正在尝试使用 python flask 运行网页并将其与 MySQL 数据库连接,在安装 MySQL 包时我收到此错误。

在此处输入图片说明

我正在 ec2 Linux AWS 上执行此操作。

TL; 博士

  1. “理想”解决方案(Ubuntu/Debian 方式):
    $ python -m pip uninstall pip卸载新的 pip 10 并保留您的 Ubuntu/Debian 提供的补丁 pip 8。对于系统范围内的模块安装,请尽可能使用apt (除非您在 virtualenv 中),更多信息如下. 在较旧的 Ubuntu/Debian 版本中,在 virtualenvs 之外使用 pip 时总是添加--user标志(安装到~/.local/ ,自 2016 年以来默认在 python-pip 和 python3-pip 中)。

  2. 如果您想专门使用新的 pip 10,有 3 个快速解决方法:

    • 只需重新打开一个新的 bash 会话(一个新的终端选项卡,或键入bash )- pip 10 变得可用(请参阅pip -V )。 debian 的 pip 8 仍然安装但已损坏;
    • $ hash -d pip && pip -V刷新$PATH 中的pip 路径名。 debian 的 pip 8 仍然安装但已损坏;
    • $ sudo apt remove python-pip && hash -d pip (对于 Python 3,它是 python3-pip)——完全卸载 debian 的 pip 8,以支持你的新 pip 10。

注意:除非您在 virtualenv 中,否则您始终需要将--user标志添加到非 debian 提供的 pip 10! Ubuntu/Debian 并不真正支持您在 virtualenv 之外在系统范围内使用 pip 10。 永远不要sudo pip

详情:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100


所以,这里我们在Ubuntu 16.04 ec2 机器上有Python 2.7.12 ,并且在尝试使用 pip 时得到ImportError: cannot import name main 这是由pip install --upgrade pip命令引起的:它安装了最新的 pip 版本 10 以及来自 OS 发行版(系统 Python 安装)的 python-pip debian 包的 Ubuntu 的默认 pip 版本,完全绕过了 Ubuntu apt子系统。 它破坏了 Ubuntu 的默认 pip:来自 python-pip(系统安装到 /usr/bin/pip*)的 debian-patched 启动程序脚本尝试从新安装的 pip 10 库中导入 main(),但导入不同路径,所以它失败了。

pip 问题跟踪器的开发人员线程中更详细地讨论了此错误,包括一些建议的解决方案,例如:

  • $ hash -d pip命令:调用hash时,pip 的全路径名通过搜索$PATH 中的目录确定并记住。 任何以前记住的路径名都将被丢弃。 -d选项使外壳程序“忘记”给定包名的记住位置;

  • 同样,您可以简单地重新打开一个新的 bash 会话(一个新的终端选项卡)来刷新 $PATH 中的 pip 路径名;

  • 您可以只使用版本化的pip2命令(或 Python 3 的pip3 )而不是pip来调用旧系统安装的启动程序/usr/bin/pip2 ,而位于$HOME/.local/bin目录(pip, pip2, pip2.7) 将调用您的新用户安装的 pip 10 版本;

  • 您还可以将版本控制的 Python 命令与-m开关结合使用来运行适当的 pip 副本,例如:
    $ python2 -m pip install --user SomePackage # 默认 Python 2
    $ python2.7 -m pip install --user SomePackage # 特别是 Python 2.7
    如果您有多个 Python 版本并且需要 PyPI 的扩展(例如 MySQL-python 模块 (MySQLdb) 或 Flask-MySQL,用于特定 Python 版本),这会很方便。 只有在 virtualenv 之外才需要--user开关。

  • 或者,卸载 用户安装或系统安装的两个 pip之一来解决冲突:
    $ python -m pip uninstall pip – 从 python-pip debian 包(python3-pip for Python 3)中删除手动安装的 pip 以支持先前安装的 Ubuntu 版本; 它稍旧,但它可以很好地从 PyPI 中找到并安装最新的模块,并且默认情况下在 $PATH 中有一个有效的 pip 命令;
    $ sudo apt-get remove python-pip – 卸载 Ubuntu 提供的 pip 以支持最新的 pip 10; 如果无法通过简短的pip命令访问,只需将您的$HOME/.local/bin目录添加到您的 $PATH 环境变量以使用pip命令(见上文)。
    注意: Ubuntu 16.04 pip v8.1.1 和最新的 pip v10.0.1 产生完全相同的 PyPI 索引搜索结果并且可以拉出相同的模块版本;

  • 最后,您可以完全忽略这两个 pip 以支持 APT,并使用以下命令从 Ubuntu 存储库在系统范围内安装 Python 包:
    $ apt search <python-package> # 或者旧版 Ubuntu 中的apt-cache search
    $ apt show <python-package> # 例如 python-flask
    $ sudo apt install <python-package> # 或sudo apt-get install
    python-为前缀的包适用于 Python 2; 使用python3-适用于 Python 3。
    标准的 apt-get 安装方法可能正是您所需要的。 例如,在您的情况下:
    python-mysqldb - MySQL 的 Python 接口 <- MySQLdb 的一个分支 == MySQL-python
    python-flask-sqlalchemy - SQL Alchemy 支持
    python-pymysql - 纯 Python MySQL 驱动程序
    事实上,只要有可能,Ubuntu 存储库中的 python-packages 都是首选,特别是在系统依赖严重的情况下或在系统范围内使用时 当然,与 PyPI 相比,Ubuntu 存储库中 Python 包的数量(几千!)相对较少(并且只有一个版本),因为任何操作系统存储库都略微落后于 PyPI 版本。 但是 APT 的好处是所有 Ubuntu 提供的软件包都在 Ubuntu 中进行了集成测试,而且 apt-get 可以快速自动解决像 C 扩展这样的重度依赖。 作为 apt 安装的一部分,您将始终获得所需的系统库,但使用 pip 您就没有这样的保证
    然而,如果你真的只需要最新的(或某些较旧的)包版本,或者它只能在 PyPI 上找到,或者模块需要隔离时,APT 可能不是一个选择; 那么pip确实是更合适的工具。 如果您必须在 Ubuntu 上使用pip install命令而不是apt-get install ,请确保它在隔离的虚拟开发环境中运行,例如使用virtualenv ( sudo apt-get install python-virtualenv ),或使用内置的venv模块(仅在 python3 中可用),或在每个用户级别( pip install --user命令选项),但不是系统范围的(从不sudo pip !)。

注意:应避免在 Ubuntu/Debian 上使用sudo pip命令(具有 root 访问权限),因为它会干扰系统包管理器(apt)的运行,并且在系统使用的 python 模块意外升级时可能会影响 Ubuntu OS 组件,特别是依赖于另一个 pip 包。 建议永远不要使用 Pip 来更改系统范围的 Python 包,因为这些包在 Ubuntu 上由 apt-get 管理。

这些步骤对我有用。

1-从python卸载pip更新。
2-从你的 Ubuntu 中卸载 pip 包。
3-检查 pip 二进制文件是否不再存在于您的系统中。

python -m pip uninstall pip
apt remove python-pip
whereis pip

4-下载并安装pip。 VanDragt.com 的积分

wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py
sudo python3 /tmp/get-pip.py
pip install --user pipenv
pip3 install --user pipenv
echo "PATH=$HOME/.local/bin:$PATH" >> ~/.profile
source ~/.profile
whereis pip

现在你应该可以安装任何你想要的 pip 包了。

我的ImportError: cannot import name main ,我有同样的ImportError: cannot import name main

我的系统是Linux Ubuntu发行版,我执行了以下命令:

python -m pip uninstall pip

这已经删除了一个本地(对于用户) pip版本。

我已经有一个旧的pip / pip2系统可执行文件(古代安装的apt-get ),它的工作pip2

正如 pip 的 github 问题中所建议的

临时修复是-

编辑您的/usr/bin/pip文件并注释导入 main 的行并进行编辑

#from pip import main
from pip._internal import main as main

非常适合我。 注意 -这是一个临时修复 等待团队 pip 解决此问题。

from pip import main
if __name__ == '__main__':
    sys.exit(main())

对此:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

正如this SO answer中所建议的那样。

试试这个

检查您使用的python版本

# Python --version

并尝试安装例如如果您的版本是 2.7

#python2.7 <package name> 

会工作得很好......

pip 19 升级后,我遇到了类似的问题。 所以我做了以下来解决这个问题。

pip install --upgrade pip==9.0.3

而不是

pip 安装 -U pip

sudo easy_install MySQL-python可以帮助或尝试;

sudo yum install mysql-devel python-devel MySQL-python

查看本教程以获取帮助,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM