簡體   English   中英

如何使用 Python 從嵌套子目錄導入內容?

[英]How do I import something from a nested child directory with Python?

在我的主文件(根級別)中,我有:

from deepspeech2_utils import reduce_tensor, check_loss

我還有一個__init__.py有:

from submodules.deepspeech2 import utils as deepspeech2_utils

我有一個看起來像這樣的目錄結構:

main.py
__init__.py
-submodules
  -deepspeech2
    -utils.py

但我收到一個錯誤:

    from deepspeech2_utils import reduce_tensor, check_loss
ImportError: No module named deepspeech2_utils

我也試過:

from submodules.deepspeech2.utils import reduce_tensor, check_loss

但得到同樣的錯誤。

我究竟做錯了什么?

因此,目錄在 python 中被識別為模塊的方式是在這些目錄中存在__init__.py文件。 這些__init__.py文件不需要有代碼。 所以改變你的目錄結構看起來像這樣

root
    main.py
    __init__.py
    submodules
        __init__.py
        deepspeech2
            __init__.py
            utils.py

現在完成此操作后, __init__.py init__.py 中的導入語句(如果沒有上述目錄更改,則無法正常工作)具有 scope,它在main.py中將不可見-具有不同的 scope。 為了實現您正在做的事情,將 main.py 中的導入語句更改為

from root.deepspeech2_utils import reduce_tensor, check_loss

除了命名空間的原因,我必須建議,不鼓勵在__init__.py中導入,因為您的模塊的用戶可能只想從您的模塊/子模塊中導入特定的東西,而您在__init__.py中的導入語句將迫使他們有更多的導入比他們想要的。 這是另一篇文章的答案,詳細討論了這些問題

您需要將所有子文件夾init .py 放入模塊中轉換此文件夾並導入此文件夾。

暫無
暫無

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

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