1. ホーム
  2. python

[解決済み] Pythonで`from six.moves import urllib`は何をするのですか?

2022-02-11 20:30:19

質問

Pythonのコードに以下のような行がありました。

from six.moves import urllib

同時に urllib.py を任意の場所に配置することができます。というファイルがあることがわかりました。 six.py をパッケージルートに置き、その中に class Module_six_moves_urllib(types.ModuleType): の中にあります。

これかな?これはどのように定義されているのですか?

アップデイト

Python初心者で、Pythonの構文についての質問で申し訳ありません。私は、次のことを学びました。 import はPythonのファイル名で py という拡張子があります。では、この場合、このファイルはどこにあるのでしょうか?

解決方法は?

6 は、Python 2 と Python 3 の両方に互換性のあるコードを書くことを支援するパッケージです。

Python2と3でコードを書くときに開発者が直面する問題の1つは、機能は同じでも、標準ライブラリのいくつかのモジュールの名前が変わっていることです。

その six.moves モジュールは、Python2 と 3 の両方に共通の名前でこれらのモジュールを提供します (ほとんどは Python2 モジュールを Python 3 モジュールの名前で提供することです)。

つまり、あなたの行は

from six.moves import urllib

インポート urllib を混合してインポートします。 urllib , urllib2urlparse の構造を真似て、Python2の urllib . 以下もご参照ください。 こちら .

EDIT を、質問の更新に対応させる。

TLDR; インポートモジュール urllib とファイルシステム上のファイルとの関係です。関連するファイルは、まさに six.__file__ を指しています。

サードパーティモジュールは、以下のファイル/ディレクトリで定義されます。 にリストアップされています。 sys.path . ほとんどの場合、モジュールがインポートされたファイル名は __file__ 属性があります。 six.__file__ . しかし six.moves なぜなら、公開されたモジュールは実際のPythonモジュールと1対1に対応するのではなく、それらのハックされたバージョンに対応するかもしれないからです。