使用している Python のバージョンによって異なります。対象となる Python のバージョンが 2.4 以前 (2015 年にはそうでないことを願っています) の場合、2 つのモジュールを区別する方法 (ハックなし) がないため、それは悪い習慣です。
ただし、Python 2.5 以降では、パッケージの名前空間内で標準の lib モジュール名を再利用することはまったく問題ないと思います。実際、それがPEP328 の精神です。
Python のライブラリが拡大するにつれて、ますます多くの既存のパッケージ内部モジュールが、突如として標準ライブラリ モジュールの影になります。どのモジュールが意図されているかを特定する方法がないため、パッケージ内では特に難しい問題です。あいまいさを解決するために、 foo は常に sys.path から到達可能なモジュールまたはパッケージにすることが提案されています。これを絶対インポートと呼びます。
python-dev コミュニティは、絶対インポートがより一般的なユース ケースであり、絶対インポートが相対 (パッケージ内) インポートのすべての機能を提供できるため、デフォルトとして絶対インポートを選択しました。階層内で、またはあるパッケージを別のパッケージ内に移動する場合。
これはセマンティクスの変更を表すため、絶対インポートは Python 2.5 および 2.6 ではオプションになります。from __future__ import absolute_import
SWS.time
は明らかにコードのリーダーと同じではありません。私はを使用するだけでなく、何らかの方法でコードを拡張することtime
を期待しています。SWS.time
time
したがって、SWS.foo
インポートする必要がある場合SWS.time
は、絶対パスを使用する必要があります。
# in SWS.foo
# I would suggest renaming *within*
# modules that use SWS.time so that
# readers of your code aren't confused
# with which time module you're using
from SWS import time as sws_time
または、Bakuriu の回答のように、明示的な相対インポートを使用する必要があります。
# in SWS.foo
from . import time as sws_time
time
モジュール内に標準の lib モジュールをインポートする必要がある場合SWS.time
は、最初に将来の機能をインポートする必要があります (Python 2.5+ のみ; Python 3+ はデフォルトでこれを行います):
# inside of SWS.time
from __future__ import absolute_import
import time
time.sleep(28800) # time for bed
注: は、将来の機能がインポートされるモジュール内from __future__ import absolute_imports
のimport ステートメントにのみ影響し、他のモジュールには影響しません(別のモジュールが相対インポートに依存している場合は有害であるため)。