github
からpythonコードを開きました。 python2.x
であると想定し、実行しようとすると上記のエラーが発生しました。私が読んだことから、Python 3はurllib
自体を減価し、urllib.request
を含むいくつかのライブラリに置き換えました。
コードはpython 3で書かれているようです(知っている人からの確認をいただければ幸いです。)この時点でPython 3に移動したくない既存のコードに対して何が行われるかを研究していません。
Python 2
のurllib
モジュールがあるはずだと思って、Googleを検索し(「python2 urllibダウンロード」を使用)、見つかりませんでした。 (urllib
にはダウンロード機能が含まれているため、多くの回答に隠されている可能性があります。)Python27/lib
ディレクトリを検索しましたが、表示されませんでした。 Python27
で実行されるこのモジュールのバージョンを入手できますか?どこで、どのように?
Urllib2を使用してみてください。
https://docs.python.org/2/library/urllib2.html
この行は、urlopenを置き換えるために機能するはずです。
from urllib2 import urlopen
テスト済みPython 2.7
問題のgitへのリンクを投稿してみてください。
防御的にプログラミングし、次のようにインポートを実行できます。
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
そして、コードでは、単に使用します:
data = urlopen(MIRRORS).read(AMOUNT2READ)
from urllib.request import urlopen, Request
すべてを解決する必要があります
Urllib.request.urlopen()を使用する代わりに、pythonのリクエストを削除します2。
urllib.urlopen()python 2.xで要求する必要はありません。それがあなたのために働くことを願っています。これはpython 2.7を使用してテストされました。同じエラーメッセージが表示され、解決しました。
変化する
from urllib.request import urlopen
に
from urllib import urlopen
このように変更することで、この問題を解決することができました。ために Python2.7
in macOS10.14
rllibおよびrllib2パッケージはrllib.request、rllib.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をダウンロードして使用する方が良い
今のところ、URLの後に?
を追加することでそれを乗り越えることができるようです。