我正在尝试使用python flask运行一个网页并将其与MySQL数据库连接,并在安装MySQL包时我收到此错误.
我在ec2 Linux AWS上这样做.
Ale*_* C. 80
'理想'的解决方案(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).
如果您仍想独占使用新的pip 10,则有3种快速解决方法:
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包.
我的一分钱,我也一样ImportError: cannot import name main。
我的系统是Linux Ubuntu发行版,我已经执行了以下命令:
python -m pip uninstall pip
Run Code Online (Sandbox Code Playgroud)
这已删除一个本地(对于用户)pip版本。
我已经有一个较旧的pip/ pip2系统可执行文件(apt-get在古代安装),就像一个魅力一样。
| 归档时间: |
|
| 查看次数: |
60948 次 |
| 最近记录: |