每当我尝试使用pip安装任何软件包时,我收到此导入错误:
guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
Run Code Online (Sandbox Code Playgroud)
guru@guru-notebook:~$ cat `which pip3`
#!/usr/bin/python3
# GENERATED BY DEBIAN
import sys
# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
sys.exit(main())
Run Code Online (Sandbox Code Playgroud)
它之前工作正常,我不知道为什么它会抛出这个错误.我搜索了这个错误,但找不到任何解决方法.
如果您需要任何进一步的细节,请告诉我,我会更新我的问题.
Ant*_*ile 803
你必须无意中升级你的系统点(可能通过类似的东西sudo pip install pip --upgrade)
pip 10.x调整其内部所在的位置.pip3您看到的命令是由您的软件包维护者提供的命令(可能是debian基于此处?)而不是由pip管理的文件.
您可以在pip的问题跟踪器上阅读有关此内容的更多信息
您可能希望不升级系统点,而是使用virtualenv.
要恢复pip3您需要的二进制文件sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.
如果您想继续"不受支持的区域"(在系统软件包管理器之外升级系统软件包),您可能可以使用python3 -m pip ...而不是pip3.
vij*_*hya 92
我们可以通过修改pip文件来清除错误.
检查文件的位置:
$ which pip
Run Code Online (Sandbox Code Playgroud)
路径 - >/usr/bin/pip
转到该位置(/ usr/bin/pip)并打开终端
输入: /usr/bin/pip
你可以看到:
from pip import main
if __name__ == '__main__':
sys.exit(main())
Run Code Online (Sandbox Code Playgroud)
改成:
import sys
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
Run Code Online (Sandbox Code Playgroud)
然后按ctrl + o写入更改并退出
希望这会做!!
Ale*_* C. 66
感谢Anthony 上面的解释,您可以保留原始系统点(在/ usr/bin /和dist-packages /中)并删除手动安装的点(在〜/ .local /中)以解决冲突:
$ python3 -m pip uninstall pip
来自python3-pipdebian软件包的Ubuntu/Debian pip v8.1.1(16.04)(参见参考资料$ pip3 -V)显示了与最新的pip v10.0.1相同的搜索结果,并安装了PyPI的最新模块.它有一个工作pip命令(已经在$ PATH中),加上--user自2016年以来默认打补丁的好选项.看看pip发行说明,新版本主要是关于特定于用例的错误修复和某些新功能,所以不是每个人都必须赶紧升级pip.无论如何,新的pip 10可以部署到Python virtualenvs.
但无论是什么点,你的操作系统都允许使用APT快速安装常见的Python模块(包括numpy),而不需要pip,例如:(
$ sudo apt install python3-numpy python3-scipy具有系统依赖性)
$ sudo apt install python3-pip(Debian-patched pip,略长但无关紧要)
快速语法提醒(请参阅
man apt详细信息):(
$ sudo apt update从最新源重新同步Ubuntu包索引文件)
$ apt search <python-package-name>(在所有可用包上进行全文搜索)
$ apt show <python-package-name>(显示详细的包描述)
$ sudo apt install <python-package-name>
带有前缀的包名称python-适用于Python 2; 和前缀python3-为Python 3(例如python3-pandas).有数千个,他们在Debian和Ubuntu中进行集成测试.除非您寻求按用户级别(pip install --user选项)或virtualenv/venv 安装,否则apt可能就是您所需要的.这些系统包也可以从虚拟环境访问,因为如果你的envs没有给定模块的副本,virtualenv将优雅地回退到导入时使用系统库.您自定义安装(带有pip --user)的每用户模块~/.local/lib也将覆盖它们.
请注意,由于这是一个系统范围的安装,因此您很少需要删除它们(需要注意操作系统依赖性).这对于具有许多系统依赖性的包(例如scipy或matplotlib)很方便,因为APT将跟踪并提供所有必需的系统库和C扩展,而使用pip则没有这样的保证.
事实上,对于系统范围的Python软件包(与每用户,家庭目录级别或更低级别相比),Ubuntu 期望使用APT软件包管理器(而不是sudo pip)来避免破坏操作系统:sudo pip3目标是/usr/lib/python3/dist-packagesAPT存储操作系统的同一目录 - 敏感模块.最近的Debian/Ubuntu版本在很大程度上依赖于Python 3,所以它预安装的模块由apt不管理的,不应该更改.
因此,如果您使用pip3 install命令,请确保它在隔离的虚拟开发环境中运行,例如使用virtualenv(sudo apt install python3-virtualenv),或使用Python3内置(-m venv),或者在每个用户级别(--userpip选项,默认情况下在Ubuntu中提供) pip自2016年起),但不是系统范围的(从不sudo pip3!),因为pip会干扰 APT包管理器的操作,并且当系统使用的python模块意外更改时可能会影响Ubuntu OS 组件.祝好运!
P. S. 以上所有内容均适用于"理想"解决方案(Debian/Ubuntu方式).
如果您仍想独家使用新的pip3 v10,则有3种快速解决方法:
bash) - 并且pip3 v10可用(请参阅参考资料pip3 -V).debian的pip3 v8仍然安装但已损坏; 要么 $ hash -d pip3 && pip3 -V 用于刷新$ PATH中的pip3路径名的命令.debian的pip3 v8仍然安装但已损坏; 要么 $ sudo apt remove python3-pip && hash -d pip3完全卸载debian的pip3 v8 的命令,支持你的新pip3 v10. 注意:你总是需要为--user任何非debian提供的pip 添加标志,除非你在virtualenv中!(它将python包部署到~/.local/,自2016年起默认使用debian/ubuntu提供的python3-pip和python-pip).Ubuntu/Debian并不真正支持您在virtualenv之外使用系统范围内的pip 10.从不sudo pip3!
更多细节:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100
Sak*_*ket 45
仅在一步中解决.
我也遇到过这个问题,但是这可以通过1个命令简单地解决,而不必费心而浪费时间,我已经在多个系统上尝试过它,这是解决这个问题最干净的解决方案.那就是:
对于python3: - sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall.
这样,您只需使用即可安装软件包pip3.检查使用pip3 --version.
对于旧版本,请使用:sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall.
通过这个,现在您可以使用简单地安装包pip.检查使用pip --version.
Cir*_*四事件 29
用python -m pip install而不是pip install
例:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
Run Code Online (Sandbox Code Playgroud)
该pip(相应地pip3)执行是由你的发行版提供的(python-pip在Ubuntu 16.04封装)和位于/usr/bin/pip.
因此,pip当您升级pip时,它不会与软件包本身保持同步,并且可能会中断.
如果您只是python -m pip直接使用,例如:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
Run Code Online (Sandbox Code Playgroud)
它遍历您的Python路径并找到最新版本的pip,并执行该文件.
它依赖于这个文件可以执行的事实import,但这是一种非常标准的接口类型,因此不像破解Debian脚本那样容易破解.
然后我建议将以下别名添加到您的.bashrc:
pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )
Run Code Online (Sandbox Code Playgroud)
在从pip39.0.1 更新到18.0 之后,在Ubuntu 16.04中进行了测试.
Cod*_*ker 17
您可以通过重新安装pip来解决此问题.
使用以下命令行命令之一重新安装pip:
Python2:
python -m pip uninstall pip && sudo apt install python-pip --reinstall
Run Code Online (Sandbox Code Playgroud)
Python3:
python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Run Code Online (Sandbox Code Playgroud)
Sr.*_*DRO 16
检查pip是否已缓存在另一个路径上,为此,调用$ which pip并检查路径是否与错误中提示的路径不同,如果是这样的话:
$ hash -r
Run Code Online (Sandbox Code Playgroud)
缓存清除后,pip将再次运行.参考:http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory
我正在运行一个系统,我有sudo apt但没有sudo pip.(并没有su访问.)我按照pip的建议让自己陷入同样的境地:
您正在使用pip版本8.1.1,但是18.0可用.您应该考虑通过'pip install --upgrade pip'命令进行升级.
没有其他修复工作对我有用,因为我没有足够的管理员权限.然而,在阅读这篇文章时,有些事情困扰着我:
所以,我发现这个命令行可以让我回到原来的位置.如果您使用的是不同于8.1.1的版本,您显然希望更改该部分.
python -m pip install --force-reinstall pip==8.1.1 --user
Run Code Online (Sandbox Code Playgroud)
这是唯一对我有用的东西,但它完美无缺!
我在 Ubuntu 16.04 系统上遇到了同样的问题。我设法通过使用以下命令重新安装 pip 来修复它:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3
小智 5
我在使用新的 LXC(strech)的 Pixelbook 上也发生了同样的事情。这个解决方案与公认的解决方案非常相似,有一个细微的区别,它为我修复了 pip3。
sudo python3 -m pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)
这影响了版本,现在它按预期工作。
我在这里找到它... Python.org:确保 pip 是最新的
| 归档时间: |
|
| 查看次数: |
327311 次 |
| 最近记录: |