2016-01-25 21 views
8

私はPythonのコードに次の行を見つけました。私は、パッケージのルートにファイルsix.pyがあり、それにはclass Module_six_moves_urllib(types.ModuleType):が入っていることがわかりました。これは、それがPythonで `six.moves import urllib`は何をしますか?</p> <pre><code>from six.moves import urllib </code></pre> <p>同時に、私はどこでも<code>urllib.py</code>を見つけることができます:

ですか?これはどう定義されていますか?

UPDATE

は申し訳ありませんが、私は、Pythonに新しいですし、質問には、Pythonの構文についてです。 importの後にあるのは、py拡張子のないPythonファイル名です。この場合、このファイルはどこにありますか?

+0

'six.moves.urllib'は何を求めていますか?あなたはマニュアルを読んだことがありますか? https://pythonhosted.org/six/#module-six.moves - あるいはそれがどのように正確に実装されているか知りたいですか?(その場合、ソースコードが利用可能です...)? – deceze

答えて

24

sixはPython2のためのコードを書くとき、開発者が直面する問題の一つと3からのいくつかのモジュールの名前ということである

3のPython 2とPythonの両方と互換性のあるコードを書くのに役立ちますパッケージです標準ライブラリは変更されていますが、機能は同じです。

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

だからあなたのライン

from six.moves import urllib 

輸入urllibのpython3で実行してのpython3のurllibの構造を模倣し、Python2とurlliburllib2urlparseの混合物を輸入しています。 hereも参照してください。質問の更新対処する

EDIT

TLDRを。この場合、インポートされたモジュールurllibとファイルシステム上のファイルとの間に直接の関係は必ずしもありません。関連ファイルはまさにsix.__file__が指しているものです。

第三者のモジュールは、 がsys.pathにリストされているファイル/ディレクトリに定義されています。ほとんどの場合、問題のモジュールの__file__属性を調べることによって、モジュールがインポートされるファイルの名前を見つけることができます。 six.__file__。しかし、six.movesでは、エクスポーズされたモジュールが実際には実際のPythonモジュールに1対1で対応しているのではなく、それらのバージョンをハックしている可能性があるため、単純ではありません。

関連する問題

 関連する問題