ここでの正解は、PyDev の言うことを実行することです。
import ldap.sasl
は常に import をインポートするためldap
、このimport ldap
ステートメントは必要ないため、削除する必要があります。
最後の行を削除すると両方とも未使用であると主張する PyDev については… まあ、それは間違いなく世界で最高のメッセージではありませんが、実際には間違っていません. を持っているimport ldap
ので不要ですimport ldap.sasl
。ただし、import ldap.sasl
は使用しないため不要です。確かに、を削除するimport ldap.sasl
と、import ldap
停止は不要になりますが、警告は、コードの別のバージョンに当てはまることについてではありませんよね?
おっしゃる通り、パッケージのチュートリアル セクションではこれについてまったく説明されておらず、2.x のリファレンス ドキュメントでは、それについて直接何も説明されていません。
ただし、インポート システムの 3.x リファレンス ドキュメントでは、この動作について具体的に説明し、例を示しています (たとえば、「通常のパッケージ」セクションを参照)。2.x リファレンスでは、元のパッケージ仕様を直接参照しています。
パッケージのサブモジュールがロードされるたびに、Python はパッケージ自体が最初にロードされ、__init__.py
必要に応じてそのファイルがロードされることを確認します。パッケージも同様。したがって、ステートメント import Sound.Effects.echo が実行されると、最初にサウンドがロードされます。次に、Sound.Effects が読み込まれることを確認します。その後、Sound.Effects.echo がロードされていることを確認します (以前にロードされていない場合はロードします)。
また、既存のすべての Python 2.x 実装は、3.x のドキュメントと元のパッケージ仕様で説明されている方法で処理を行います。また、人々が将来まったく新しい 2.x 実装を作成する可能性は低いため、信頼できると思います。これは保証です。
元の理論的根拠を知りたい場合は、ni
Python 1.3 からモジュールを読む必要があります。(リンクはありません。) なぜ 2.7 でもまだそうなのか知りたいのであれば、それは Python での最初の抜本的なクリーンアップが 3.0 まで行われなかったからです。3.0 や 3.3 (改善され、さらにクリーンアップされた後) でさえもそうである理由を知りたい場合は、 python-ideasおよびpython-devのPEP 328などに関するimport
議論を読む必要があります。 . そうではないというコンセンサスがあるときimportlib
何かを変更する場合 (または、議論がほとんどなく、誰もコンセンサスを求める必要さえない場合)、PEP やその他のメーリング リスト以外の「紙の証跡」は得られません。私の記憶が正しければ、PEP 328 になった相対インポートと絶対インポートのアイデアについて議論しているときに、たまたま出てきましたが、修正が必要な問題だとは誰も考えていませんでした。