なぜ私はdatetime
モジュールではなく、time
モジュールをシャドウすることができますか?
Pythonが最初に通常.py
ファイルを検索する前に、(Cで実装)の組み込みモジュールを検索しますので(さまざまな場所で、あなたのcwd
から始まる、sys.path
の内容を参照してください)。
あなたはモジュールのインポートが(sys.modules
で発見されていないモジュール)が発生した場合に照会されているファインダーが含まれているsys.meta_path
を検査することで、これを見ることができます:
>>> sys.meta_path
[<class '_frozen_importlib.BuiltinImporter'>,
<class '_frozen_importlib.FrozenImporter'>,
<class '_frozen_importlib_external.PathFinder'>]
まずこのリストにあるBuiltinImporter
名前の通り、組み込みモジュールの発見を処理します。
>>> time
<module 'time' (built-in)>
とあなたのtime.py
の検索が実行される前に発見された:
時間モジュールは、(これらのリストについてはsys.builtin_module_names
を参照)で、内蔵されています。 (sys.path
に記載されているエントリを見て、PathFinder
発見datetime.py
)
>>> datetime
<module 'datetime' from '/home/jim/anaconda3/lib/python3.6/datetime.py'>
ので、あなたの現在の作業ディレクトリのマスクそれでdatetime.py
:datetime.py
ではないが。
はい、あなたができる再オーダーsys.meta_path
でファインダーをして置くことにより、PathFinder
たばかりtime.py
その結果が、あなただけ:-)実験していない限り、(それをしないでください最初。
組み込みのモジュールを故意に隠すのはひどい考えです。なぜあなたはそれをしたいのですか? –
"理由"についてはわかりませんが、ここでは "方法"です:あなたのモジュールに "my_time.py"という名前をつけて、この方法でインポートしてください: 'import my_time as time'。 –
なぜ私はこれをやりたいのですか: 私はマイクロpythonを使ってプロジェクトを進めています。マイクロプロセッサーで使用可能な時間モジュールのバージョンには、プロセッサーが開始してからのミリ秒数を返すticks_ms()関数があります。私が自分のコンピュータに書いているコードを開発するときに、コードをマイクロプロセッサにアップロードしなくても簡単にテストできるようにするために、私はすべての車載用のモジュールをシミュレートしました。通常の時間モジュールにはticks_ms()関数がありません。マイクロソフトでインポートが機能しないため、何か他の名前を付けることはできません。 – Stefan