質問: 標準ライブラリとカレントフォルダに同名のモジュールがある場合、デフォルトではカレントフォルダが優先されるかと思います。 例)以下のようなフォルダ構成のとき、 ``` some-dir/ main.py unittest.py ``` main.pyで `import unittest` すると、標準ライブラリの `unittest` ではなく、`some-dir` にある `unittest.py` がインポートされる。 このケースで、標準ライブラリの `unittest` を明示的にインポートするにはどうしたらいいでしょうか。 補足) `sys.path` からカレントフォルダを削除することで、とりあえずは目的は満たせたのですが、その場合はカレントフォルダから他のモジュールをインポートできなくなってしまいました。 もっとスマートなやり方があれば何卒ご教示ください。 ``` import sys import os sys.path.remove(os.getcwd()) import unittest # ← 標準ライブラリからインポートされる ``` ### 2020/07/31 追記 回答、及びコメントありがとうございました。 自分なりに疑問点を整理した結果、「どうすればできるか」というよりは、「どういう思想でこういう仕様になっているのか」という部分が引っかかっていたのだと思います。 (起動スクリプトのみ `from . import unittest` の記法が使えないのはなぜか、カレントフォルダを明示的に指定する方法はあるのに、標準ライブラリパスを明示的に指定する方法がないのはなぜか, etc) 「起動スクリプト+モジュールフォルダの形で提供するのがベストプラクティス」ということで納得しました。
回答: Python のつくりから言うと、同名のモジュールを通常の `import` で区別する手段はありません(コメントにあるように `importlib` を使うことで無理やり何とかできますが)。 ですので、通常は標準パッケージとかぶらないように名前をつけます。他人に使われることを想定したライブラリの場合では、モジュール名のトップレベルに独自の名前を置く(`mylib.xxx` のように)というのも一般的な慣習です。他人にコードを再利用されないようなアプリケーションでも同様にしているケースをよく見ます。