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

Tan*_*sal 47 python pip flask

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

在此输入图像描述

我在ec2 Linux AWS上这样做.

Ale*_* C. 80

TL; DR

  1. '理想'的解决方案(Ubuntu/Debian方式):
    $ python -m pip uninstall pip 卸载新的pip 10并保留你的Ubuntu/Debian提供的补丁点8.对于系统范围的模块安装apt尽可能使用(除非你是virtualenv),更多信息如下.在较旧的Ubuntu/Debian版本中,总是--user在virtualenvs之外使用pip时添加标志(~/.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.

注意:你总是需要--user为非debian提供的pip 10 添加标志,除非你是在virtualenv!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,并且得到ImportError:在尝试使用pip时无法导入名称main.它是由命令引起的:它安装了最新的pip版本10以及来自OS发行版(系统Python安装)的python-pip debian软件包的Ubuntu默认pip版本,完全绕过Ubuntu 子系统.它打破了Ubuntu的默认点:从python-pip(系统安装到/ usr/bin/pip*)的debian-patched启动器脚本尝试从你新安装的pip 10库中导入main(),但导入不同路径,所以它失败了.pip install --upgrade pipapt

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

  • $ hash -d pip命令:当hash被调用时,PIP的全路径名,通过检索$ PATH念着目录确定.任何以前记住的路径名都将被丢弃.该-d选项使shell"忘记"给定包名称的记忆位置; 要么

  • 同样,您只需重新打开一个新的bash会话(一个新的终端选项卡)来刷新$ PATH中的pip路径名; 要么

  • 您可以使用版本化pip2命令(或pip3用于Python 3)而不是pip调用旧的系统安装的启动器/usr/bin/pip2,而位于$HOME/.local/bindir(pip,pip2,pip2.7)中的任何pip脚本将调用新的用户安装的pip 10版本;

  • 您还可以将版本化的Python命令与-m交换机结合使用来运行相应的pip副本,例如:#define
    $ python2 -m pip install --user SomePackagePython 2
    $ python2.7 -m pip install --user SomePackage#specific Python 2.7
    如果您有多个版本的Python并且需要来自PyPI的扩展,这样很方便作为您的MySQL-python模块(MySQLdb)或Flask-MySQL,用于特定的Python版本.该--user开关仅在virtualenv之外需要.

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

  • 最后,你可以完全忽略两个点,支持APT,并在系统范围内从Ubuntu repo安装Python包:
    $ apt search <python-package> #或者apt-cache search在旧的Ubuntu
    $ 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,您没有这样的保证.
    但是,APT可能不是一个选项,如果您确实只需要最新的(或某些较旧的)软件包版本,或者只能在PyPI上找到它,或者需要隔离模块时; 那么pip确实是比较合适的工具.如果你必须pip install在Ubuntu 上使用命令而不是apt-get install,请确保它在一个独立的虚拟开发环境中运行,例如使用virtualenv(sudo apt-get install python-virtualenv),或使用内置venv模块(仅在python3中可用),或者在每个用户级别(pip install --user命令选项),但不是系统范围的(从不sudo pip!).

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


Jos*_*dio 30

这些步骤对我有用.

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

python -m pip uninstall pip
apt remove python-pip
whereis pip
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

现在您应该能够安装所需的任何pip包.


Fab*_*lao 6

我的一分钱,我也一样ImportError: cannot import name main

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

python -m pip uninstall pip
Run Code Online (Sandbox Code Playgroud)

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

我已经有一个较旧的pip/ pip2系统可执行文件(apt-get在古代安装),就像一个魅力一样。