[英]python3 subprocess pip “ImportError: cannot import name main” in terminal
[英]File “/usr/bin/pip”, line 9, in <module> from pip import main ImportError: cannot import name main
“理想”解决方案(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 中)。
如果您仍想专门使用新的 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。 注意:除非您在 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
。
临时修复是-
编辑您的/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.