使用pip install
显然在我的Ubuntu 16.04系统上使用python 2.7.11+的任何模块都会抛出此错误:
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
pip有什么问题?如有必要,我该如何重新安装?
更新:完整回溯如下
sunny@sunny:~$ pip install requests
Collecting requests
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 328, in run
wb.build(autobuilding=True)
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 748, in build
self.requirement_set.prepare_files(self.finder)
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 512, in _prepare_file
finder, self.upgrade, require_hashes)
File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 273, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 442, in find_requirement
all_candidates = self.find_all_candidates(req.name)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 400, in find_all_candidates
for page in self._get_pages(url_locations, project_name):
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 545, in _get_pages
page = self._get_page(location)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 648, in _get_page
return HTMLPage.get_page(link, session=self.session)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 757, in get_page
"Cache-Control": "max-age=600",
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 480, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/download.py", line 378, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 46, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/adapters.py", line 376, in send
timeout=timeout
File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 610, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 228, in increment
total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
Ubuntu附带了一个来自前寒武纪的PIP版本,如果您不想花费数小时和数小时来调试与pip相关的问题,那么就必须升级它。
apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py
正如您所观察到的,我包含了Python 2.x和3.x的信息
使用pitft.sh / adafruit-pitft.sh从Adafruit安装RaspberryPI TFT时遇到同样的问题。
我不满意编码样式,错误来自某处以某种方式被解释 - 正如之前的答案所见。
备注:retry.py的类型错误异常显然是一个错误,由一个不合适的分配和类的实例的计算引起的回复一个int的默认值为10 - 在代码的某个地方......应该修复通过添加一个inplace-operator,或修复错误的赋值。
因此,首先尝试分析并修补错误本身。我案例中的实际错误是相同的 - 由pip调用的retry.py。
安装脚本adafruit-pitft.sh / pitft.sh尝试应用urllib3,它本身试图通过pip安装嵌套依赖项,所以同样的错误。
adafruit-pitft.sh#或pitft.sh
...
_stacktrace = sys.exc_info()[2])文件“/usr/share/python-wheels/urllib3-1.13.1-py2.py3 none-any.whl / urllib3 / util / retry.py”,第228行,in增量
总计 - = 1
TypeError:不支持的操作数类型 - =:'重试'和'int'
对于当前分布(基于debian-9.6.0 / stretch):
文件“/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py”,第315行,增量
总计 - = 1
TypeError:不支持的操作数类型 - =:'重试'和'int'
以下 - dirty * :) - patch启用探测错误跟踪:
# File: retry.py - in *def increment(self, ..* about line 315
# original: total = self.total
# patch: quick-and-dirty-fix
# START:
if isinstance(self.total, Retry):
self.total = self.total.total
if type(self.total) is not int:
self.total = 2 # default is 10
# END:
# continue with original:
total = self.total
if total is not None:
total -= 1
connect = self.connect
read = self.read
redirect = self.redirect
cause = 'unknown'
status = None
redirect_location = None
if error and self._is_connection_error(error):
# Connect retry?
if connect is False:
raise six.reraise(type(error), error, _stacktrace)
elif connect is not None:
connect -= 1
临时补丁的声音输出是(显示两次......?):
重试(重试(total = 1,connect = None,read = None,redirect = None))连接被'ConnectTimeoutError(<requests.packages.urllib3.connection.VerifiedHTTPSConnection对象/
重试(重试(total = 0,connect = None,read = None,redirect = None))连接被'ConnectTimeoutError(<requests.packages.urllib3.connection.VerifiedHTTPSConnection对象)处断后
找不到满足要求evdev的版本(来自版本:)
找不到evdev的匹配分布
警告:Pip无法安装软件!
所以在我的情况下实际上有两件事会导致错误,这在其他环境中会有所不同:
我的安装环境是从内部debian + raspbian镜像离线,因此不想设置代理...
所以我继续手动安装缺少的组件evdev:
如果您通过直接PyPI访问在线继续:
它的工作原理..
希望这在其他情况下也有帮助。
Arno-Can Uestuensoez
另见:issue - 35334:https://bugs.python.org/issue35334
现在也见:issue - 1486:https://github.com/urllib3/urllib3/issues/1486
对于文件:https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py
尝试在ec2实例上安装awscli工具时,我遇到了类似的问题。我更改了安全组以允许端口443入站和出站访问,这解决了我的问题。
当我尝试使用命令virtualenv
创建virtualenv myVirtualEnv
时,我收到此错误。我刚刚在命令之前加了一个sudo
;它解决了一切。
我尝试了上面解决的解决方案:
apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py
当我尝试
python get-pip.py
python3 get-pip.py
我收到了这条消息
Could not install packages due to an EnvironmentError:
[Errno 13] Permission denied: /usr/bin/pip3 Consider using the --user
option or check the permissions.
我做了以下工作
python3 -m venv env
source ./env/bin/activate
Sudo apt-get update
apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py
pip3 install pip
sudo easy_install pip
pip install --upgrade pip
我也有这个问题。最初,代理设置并正常工作。然后我连接到一个不通过代理的网络。在取消设置代理点后再次获得工作。
unset http_proxy; unset http_prox; unset HTTP_PROXY; unset HTTPS_PROXY
奇怪的是,如果我从环境中删除代理并将其添加到命令行,它对我有用。例如,升级pip
本身:
env http_proxy= https_proxy= pip install pip --upgrade --proxy 'http://proxy-url:80'
我的问题是在环境中使用代理。似乎pip只尊重争论中的那一个。
这是我找到的这个问题的有效解决方案。
sudo apt-get clean
cd /var/lib/apt
sudo mv lists lists.old
sudo mkdir -p lists/partial
sudo apt-get clean
sudo apt-get update
解:
1. sudo apt remove python-pip
2. pip3 install pip
(或由get-pip.py安装pip)
为什么: 在由apt-get安装的pip 8.0.1上发生此错误。并且仅在您的网络不稳定时发生。
如果你用apt安装了一个pip,它会隐藏你通过其他方式安装的pip,所以你应该先删除apt。
我断开了网络并测试了使用pip3或get-pip.py安装的3个版本的8.0.1,9.0.3,10.x,没有发生错误。所以,我认为只有pip 8.0.1的apt版本有这个bug,其他的都没问题。
对于我自己来说,事实证明wlan0已经关闭,导致我无法连接。因此,确保wlan0启动,允许pip / pip3正常工作。
在我的情况下,我在sudo模式下打开了Pycharm,并在pycharm终端中运行pip install nltk,显示此错误。使用sudo pip install运行解决了这个错误。
如果您位于代理之后,则必须在开始安装之前执行一些额外的配置步骤。您必须将环境变量http_proxy设置为代理地址。使用bash,这是通过命令完成的
export http_proxy="http://user:[email protected]:port/"
你也可以提供
--proxy=[user:pass@]url:port
pip的参数。 [user:pass@]
部分是可选的。
首先,由于网络问题,存在此问题,卸载和重新安装一切都不会有太大帮助。可能你落后于代理,在这种情况下你需要设置代理。
但就我而言,我遇到了问题,因为我并没有落后于代理。通常,我在代理后面工作,但在家工作时,我在网络设置中将代理设置为无。
但是,即使删除了代理设置,我仍然会遇到相同的错误。
所以,当我打字的时候
env | grep proxy
我找到了这样的东西:
http_proxy=http://127.0.0.1:1234/
这就是我仍然得到同样错误的原因,即使我认为我已经删除了代理设置。
要取消设置此代理,请键入
unset http_proxy
对所有其他条目采用相同的方法,例如https_proxy。
这里发生的是在两个不同的地方(相同的代码,但名称不同)导入时,request / urllib3的销售版本会发生冲突。如果您有网络错误,它不会重试获取方向盘,但会因上述错误而失败。请参阅here以深入了解此错误。
有关系统点的解决方案,请参阅above。
如果你在由python -m venv
构建的virtualenv中存在这个问题(它仍然从/usr/share/python-wheels
复制轮子,即使你单独安装了pip),最简单的方法是“修复”它似乎是:
/usr/bin/python3.6 -m venv ...
requests
安装到环境中(这可能会引发上述错误):<venv>/bin/pip install requests
requests
将使用的rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl
的复制版本现在<venv>/bin/pip
使用安装了版本的requests
,其中已经有urllib3。
更新setuptools对我来说很好。
sudo pip install --upgrade setuptools
端口443未打开,只允许自定义tcp端口443,如果在AWS上打开端口443用于出站连接...
只是升级pip为我工作:
pip install --upgrade pip
我使用pip
为任何软件包安装收到此错误。后来我发现pip需要http_proxy
和https_proxy
变量才能在代理后面运行。设置这两个环境变量后,此问题已得到修复。
export http_proxy=http://<username>:<passowrd>@<proxy_ip>:<proxy_port>/
export https_proxy=https://<username>:<passowrd>@<proxy_ip>:<proxy_port>/
当我在代理后面工作时,这种情况发生在我身上。我只是简单地解决了这个问题
pip install --proxy http://proxyAddress:Port Package_To_Be_Installed