簡體   English   中英

無法用我自己的時間模塊遮蓋python時間模塊

[英]Can't shadow python time module with my own time module

我有一個包含三個文件的文件夾:

  • test.py
  • time.py
  • datetime.py

time.py和datetime.py相同:

def ticks_ms():
    return 5

當test.py看起來像這樣:

import datetime as t
print(t.ticks_ms())

它打印5。如果我將其更改為:

import time as t
print(t.ticks_ms())

我得到:

AttributeError: module 'time' has no attribute 'ticks_ms'

為什么我可以隱藏datetime模塊而不是time模塊?

為什么我可以datetime模塊而不是time模塊?

因為Python首先搜索內置模塊(用C實現),然后再搜索普通的.py文件(在各個位置,從cwd開始,請參見sys.path的內容)。

您可以通過檢查sys.meta_path來查看此內容,該文件包含在導入模塊(在sys.modules未找到模塊)時查詢的查找器:

>>> sys.meta_path
[<class '_frozen_importlib.BuiltinImporter'>, 
 <class '_frozen_importlib.FrozenImporter'>, 
 <class '_frozen_importlib_external.PathFinder'>]

在此列表中的第一名是BuiltinImporter ,顧名思義,它負責處理內置模塊。

時間模塊是內置的(有關這些列表,請參見sys.builtin_module_names ):

>>> time
<module 'time' (built-in)>

並且在執行搜索time.py之前找到。 雖然datetime.py不是:

>>> datetime
<module 'datetime' from '/home/jim/anaconda3/lib/python3.6/datetime.py'>

因此,當前工作目錄中的datetime.py將對其進行掩蓋( PathFinder通過查看sys.path列出的條目來查找datetime.py )。


是的,您可以對sys.meta_pathPathFinder重新排序,然后將PathFinder放在第一位,從而導致找到time.py ,但是請不要這樣做(除非您只是在嘗試:-)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM