web-dev-qa-db-ja.com

Python 2.7.10エラー "from urllib.request import urlopen" requestというモジュールはありません

githubからpythonコードを開きました。 python2.xであると想定し、実行しようとすると上記のエラーが発生しました。私が読んだことから、Python 3はurllib自体を減価し、urllib.requestを含むいくつかのライブラリに置き換えました。

コードはpython 3で書かれているようです(知っている人からの確認をいただければ幸いです。)この時点でPython 3に移動したくない既存のコードに対して何が行われるかを研究していません。

Python 2urllibモジュールがあるはずだと思って、Googleを検索し(「python2 urllibダウンロード」を使用)、見つかりませんでした。 (urllibにはダウンロード機能が含まれているため、多くの回答に隠されている可能性があります。)Python27/libディレクトリを検索しましたが、表示されませんでした。 Python27で実行されるこのモジュールのバージョンを入手できますか?どこで、どのように?

21
Steve Maguire

Urllib2を使用してみてください。

https://docs.python.org/2/library/urllib2.html

この行は、urlopenを置き換えるために機能するはずです。

from urllib2 import urlopen

テスト済みPython 2.7

問題のgitへのリンクを投稿してみてください。

37
NevDev

防御的にプログラミングし、次のようにインポートを実行できます。

try:
    from urllib.request import urlopen
except ImportError:
    from urllib2 import urlopen

そして、コードでは、単に使用します:

data = urlopen(MIRRORS).read(AMOUNT2READ)
7
boardrider
from urllib.request import urlopen, Request

すべてを解決する必要があります

7
Maciej Osowski

Urllib.request.urlopen()を使用する代わりに、pythonのリクエストを削除します2。

urllib.urlopen()python 2.xで要求する必要はありません。それがあなたのために働くことを願っています。これはpython 2.7を使用してテストされました。同じエラーメッセージが表示され、解決しました。

7

変化する

from urllib.request import urlopen

from urllib import urlopen

このように変更することで、この問題を解決することができました。ために Python2.7 in macOS10.14

4
ceekay

rllibおよびrllib2パッケージはrllib.requestrllib.parseおよび-に分割されていますrllib.error Python 3.xのパッケージ。後者のパッケージはPython 2.xには存在しません

ドキュメント から-

Urllibモジュールは部分に分割され、Python 3でurllib.request、urllib.parse、およびurllib.errorに名前が変更されました。

From rllib2 documentation -

Urllib2モジュールは、urllib.requestおよびurllib.errorという名前のPython 3のいくつかのモジュールに分割されています。

ダウンロードしたコードはPython 3.xにのみ存在するライブラリを使用しているので、Python 3.x向けに書かれていると確信しています。

Pythonにはrllibパッケージがありますが、requestサブパッケージはありません。また、多くの作業を行い、何らかの形でrequestサブパッケージをPython 2.xで使用可能にすると仮定します。

より多くの問題に遭遇する可能性が非常に高く、Python 2.xとPython 3.xの間に多くの非互換性があります。 githubのコードの少なくとも半分を書き直すことになります(そしておそらくそこから完全なコードを読んで理解するでしょう)。

それでも、実装の詳細の一部がPython 2.xからPython 3.xに変更されたという事実から生じる他のバグがあるかもしれませんPython 3.xの名前空間

Python 3.xをPython 2.xと互換性があるようにするよりも、Python 3をダウンロードして使用する方が良い

2
Anand S Kumar

今のところ、URLの後に?を追加することでそれを乗り越えることができるようです。

0
user3291138