Python PIPインストールでTypeErrorがスローされます:-=: 'Retry'および 'int'のサポートされていないオペランドタイプ


106

pip installpython 2.7.11+を搭載したUbuntu 16.04システムでモジュールを使用すると、次のエラーがスローされます。

TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

ピップの何が問題になっていますか?必要に応じて、どうすれば再インストールできますか?

更新:完全なトレースバックは以下のとおりです

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'

@MartijnPietersかしこまりました。その情報を追加します
投票者2016年

それで、それらの車輪はどこから来たのですか?pip通常は埋め込みrequestsパッケージを使用し、通常は埋め込みパッケージrequestsを使用しurllib3ます。これらのホイールは埋め込みバージョンではなく、おそらくpipこのコードの一部のサブクラスと互換性がありません。移動/usr/share/python-wheels多分さておき?
Martijn Pieters

私は期待pipを使用するpip/_vendor/requests/pip/_vendor/requests/packages/urllib3/、ありません/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3
Martijn Pieters

私はこれについて全く知りません!これに関する情報はどこで探したらよいですか?
投票者

ここでは簡単な答えはありません。あなたの問題を診断しようとしています。トレースバックは予期せぬものであり、バージョン間の衝突を示しています。これが通常requestspipその依存関係を埋め込む理由です。トレースバックは、埋め込まれたバージョンが使用されていないことを示していますが、それがなぜなのかわかりません。
Martijn Pieters

回答:


86

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の両方の情報を含めました


2
python get-pip.pyを実行すると、「OSError:[Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/pip-8.1.2.dist-info'」で
失敗する

2
@mirror、get-pip.pyがpipをインストールしようとするため、sudoを使用します
Raghuram Vadapalli

45
この問題は、pipとは関係ありません。スタックトレースは、パッケージを取得する要求が失敗したことを示し、ネットワークの問題を示しています。OPにpipを再インストールするよう指示することは、単なる迂回になります。
Thom

2
これは正しい答えです。原因は、pip現在いくつかのリリースで修正されていないままの正規パッチです:github.com/pypa/pip/issues/4779
lurscher

2
ラズベリアンでそれを使用しました。「pip」を実行できなくなりました。pip3のみを実行できます。この回答からのln -sは/ usr / local / binに/ PIPの/ usr / binに/ PIPが取られ(および変更)::私はシンボリックリンクを追加する必要がありましたstackoverflow.com/questions/29712519/...
TheTrowser

36

プロキシの背後にいる場合は、インストールを開始する前に追加の構成手順を実行する必要があります。環境変数http_proxyをプロキシアドレスに設定する必要があります。bashを使用するには、次のコマンドを実行します

export http_proxy="http://user:pass@my.site:port/" 

提供することもできます

--proxy=[user:pass@]url:port 

ピップするパラメータ。この[user:pass@]部分はオプションです。


24

setuptoolsの更新は私にとってはうまくいきました。

sudo pip install --upgrade setuptools

私も働いた。(kiwisolver> = 1.0.1-> matplotlibのから)setuptoolsの収集:後に実際に、これを実行した後、私はエラーが表示されていたことに気づいた
mayid

3
これは、ラスピアンストレッチでも同様に機能しました。見つけやすくするためにこの回答を受け入れてください
Sam Hammamy

raspbianで動作するようにするには、再起動が必要でした
Pipo

4
このコマンドは、Debian9で同じTypeErrorを引き起こします。これは普遍的な解決策ではありません。
sir__finley

15

まず、この問題はネットワークの問題が原因で発生し、すべてをアンインストールして再インストールしてもあまり役に立ちません。おそらくあなたはプロキシの背後にいます、そしてその場合プロキシを設定する必要があります。

しかし、私の場合、私はプロキシの背後にいなかったため、問題に直面していました。通常、私はプロキシの背後で作業しますが、自宅で作業するときは、ネットワーク設定でプロキシを[なし]に設定します。

しかし、プロキシ設定を削除した後でも、同じエラーが発生していました。

だから、私がタイプしたとき

env | grep proxy

私はこのようなものを見つけました:

http_proxy=http://127.0.0.1:1234/

そして、これが、プロキシ設定を削除したと思っていても、同じエラーが発生する理由でした。

このプロキシを設定解除するには、次のように入力します

unset http_proxy

https_proxyなど、他のすべてのエントリについても同じアプローチに従います。


14

ここで何が起こるかというと、ベンダー/バージョンのrequest / urllib3が2つの異なる場所(同じコードですが名前が異なる)にインポートされると競合します。その後ネットワークエラーが発生した場合、ホイールの取得は再試行されませんが、上記のエラーで失敗します。こちらをご覧くださいこのエラーのを。

システムピップを使用したソリューションについては、上記を参照してください

によって構築されたvirtualenvにこの問題がある場合python -m venv/usr/share/python-wheelspipを個別にインストールしていても、からホイールがコピーされます)、それを「修正」する最も簡単な方法は次のようです。

  1. virtualenvを作成します。 /usr/bin/python3.6 -m venv ...
  2. requests環境にインストールします(これにより上記のエラーが発生する可能性があります):<venv>/bin/pip install requests
  3. requestspipで使用されるコピーバージョンを削除します。rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl

現在、はurllib3がベンダー<venv>/bin/pipされているインストール済みバージョンを使用していrequestsます。


おかげで、私はこれ/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whlを削除しましたが、現在は修正されています(virtualenvなし)。
krsoni 2017年

実際、私の場合、仮想環境を使用していませんでした。
krsoni

で直接whlファイルを削除すると/usr/share/python-wheelspython -m venvは使用可能なファイルを作成しなくなります<venv>/bin/pip 。したがって、これらのファイルを削除する場合は、不要であることを確認してください。システムpipとvenv pipの両方が必要な場合は、get-pip.pystackoverflow.com/a/37531821/1380673を参照)でシステムをインストールする必要があり、各venvのwhlファイルを削除する必要があります。
Jan Katins

7

ポート443が開いていません。AWSの場合はカスタムTCPポート443を許可し、それ以外の場合は送信接続用にポート443を開きます...


これにより、OpenStackクラスターでの時間を大幅に節約できました。いいねディーパック!
アルンダス2017

5

私のために働いたピップをアップグレードするだけです:

pip install --upgrade pip


5
この非常に正確なコマンドを実行しているときにエラーが発生します:(
allan.simon

Raspbian Sketch Liteでのエラーが修正されました。
ラウル・サリナス- Monteagudo

1
Raspian Stretch Liteも実行していますが、エラーは修正されませんでした。
Stefan Wegener

「python -m pip install --upgrade pip」
imbatman

2

Adafruitからpitft.sh / adafruit-pitft.sh使用してRaspberryPI TFTをインストールするときに、同じ問題が発生します。

以前の回答でわかるように、どこかから解釈されるエラーがどこかにあるコーディングスタイルに満足していません。

備考:retry.pyのタイプエラー例外は明らかにバグであり、不適切な割り当てとクラスのインスタンスの計算が原因で発生します。デフォルト値が10のintへのReply -コードのどこか...どちらかで修正する必要がありますインプレースオペレーターを追加するか、誤った割り当てを修正します。

したがって、最初にエラー自体を分析してパッチを当てようとしました。私の場合の場合の実際のエラーは同じです- retry.pyによって呼び出さピップ

インストールスクリプトadafruit-pitft.sh / pitft.shは、それ自体がpipによってネストされた依存関係をインストールしようとするurllib3を適用しようとするため、同じエラーが発生します。

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行目、インクリメント

合計-= 1

TypeError:-=のサポートされていないオペランドタイプ: 'Retry'および '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:-=のサポートされていないオペランドタイプ: 'Retry'および 'int'

次の-ダーティ* :)-パッチは、サウンドエラートレースを有効にします。

# 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

一時的なパッチでのサウンド出力は(2回表示されます...?):

'ConnectTimeoutError(<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at /によって接続が切断された後、再試行(Retry(total = 1、connect = None、read = None、redirect = None)))

接続が 'ConnectTimeoutError(<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at /

要件evdevを満たすバージョンが見つかりませんでした(バージョン:から)

evdevに一致する分布が見つかりません

警告:PIPはソフトウェアのインストールに失敗しました!

したがって、私の場合、実際には2つの原因でエラーが発生しますが、これは他の環境では異なる場合があります。

  1. 行方不明evdevの =>インストールしよう
  2. ダウンロードするために、evdevを含むリポジトリ/ ディストリビューションに接続できませんでした。=>最後にそれをあきらめる

私のインストール環境は内部のdebian + raspbianミラーからオフラインになっているので、プロキシを設定したくありません...

そこで、不足しているコンポーネントevdevの手動インストールに進みました:

  1. PyPI(またはgithub.comなど)からevdevをダウンロードします。

    https://pypi.org/project/evdev/

    https://files.pythonhosted.org/packages/7e/53/374b82dd2ccec240b7388c65075391147524255466651a14340615aabb5f/evdev-1.1.2.tar.gz

  2. rootユーザーとして手動で解凍してインストールします-すべてのローカルアカウントの場合、インストール済みとして検出されます。

    sudo su-

    tar xf evdev-1.1.2.tar.gz

    cd evdev-1.1.2

    python setup.py install

  3. インストールスクリプトを再度呼び出します。

    adafruit-pitft.sh#またはpitft.sh

    ...回答ダイアログ...

    ...それでおしまい。

PyPIに直接アクセスしてオンラインで続行する場合:

  1. pypi.orgへのアクセスについて、ルーティングとファイアウォールを確認してください

  2. 必要に応じてプロキシを設定します(http_proxy / https_proxy)

そして、それは機能します。

これが他の場合にも役立つことを願っています。

アルノカンウエストゥエンソエス

----------------------------------------------

参照:問題-35334:https ://bugs.python.org/issue35334

----------------------------------------------

今すぐ参照:問題-1486:https : //github.com/urllib3/urllib3/issues/1486

ファイルの場合:https : //github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py


2

例外ケースコードをバイパスするために、ネットワークの問題を確認します

私の場合、カスタムインデックスを使用していました。そのインデックスにはルートがなかったため、例外ケースコードがトリガーされました。例外ケースのバグは依然として存在し、実際の問題を覆い隠してnc -vzw1 myindex.example.org 443いますが、ネットワークが稼働しているときに他のツールとの接続をテストして再試行することで、これを回避することができました。


1

ec2インスタンスにawscliツールをインストールしようとしたときに、同様の問題に直面していました。セキュリティグループを変更して、ポート443のインバウンドおよびアウトバウンドアクセスを許可し、問題を解決しました。


これは質問に対する答えを提供しません。十分な評判られると、どの投稿にもコメントできるようになります。代わりに、質問者からの説明を必要としない回答を提供してください。- レビューから
LukasKörfer2017

1
今は良く見えますか?私は私が役に立ったと思うことについて言及するべきだと思った
Yogesh Gupta

1

virtualenvwithコマンドを作成しようとしたときにこのエラーが発生しましたvirtualenv myVirtualEnvsudoコマンドの前にを追加しました。それはすべてを解決しました。


これは解決策ではありません。Dockerでrootとして実行し、同じ問題を抱えています。また、rootとして実行すると役立つ理由も説明しません。
エリック

1
@Eric、私はただtry&errorアプローチを使用しました。根本的な目的がわかりません。それは私のために働いたので、私は提案しました。
Zeinab Abbasimazar

1

解決策:
1. sudo apt remove python-pip
2. pip3 install pip(またはget-pip.pyで pipをインストールします

理由:
このエラーは、apt-getによってインストールされたpip 8.0.1で発生しました。また、ネットワークが不安定な場合にのみ発生しました。

aptでpipをインストールしている場合は、他の方法でインストールしたpipが非表示になるため、最初にaptを削除する必要があります。

ネットワークを切断し、8.0.1、9.0.3、10.xをpip3またはget-pip.pyでインストールされた3つのバージョンをテストしましたが、エラーは発生しませんでした。だから、私はpip 8.0.1のaptバージョンだけにそのバグがあると思います、他は大丈夫です。


1

私の場合、Pycharmをsudoモードで開き、pycharmターミナルでpip install nltkを実行していて、このエラーが表示されました。sudo pip installで実行するとエラーが解決します。


0

私もこの問題を抱えていました。最初は、プロキシが設定されており、正常に動作していました。次に、プロキシを経由しないネットワークに接続しました。プロキシpipの設定を解除した後、再び動作します。

unset http_proxy; unset http_prox;  unset HTTP_PROXY; unset HTTPS_PROXY

0

奇妙なことに、プロキシを環境から削除してコマンドラインに追加した場合、私にとってはうまくいきます。たとえば、pip自分自身をアップグレードするには:

env http_proxy= https_proxy= pip install pip --upgrade --proxy 'http://proxy-url:80'

私の問題は、環境にプロキシがあることでした。pipは引数の1つのみを尊重するようです。


0

これは私が見つけたこの問題の実用的な解決策です。

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

0

私自身は、wlan0がダウンしていて、接続できなかったことがわかりました。したがって、wlan0が起動していることを確認すると、pip / pip3が問題なく機能するようになりました。


0

私は上記の答えを試しました:

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.