簡體   English   中英

接收導入錯誤:沒有名為***的模塊,但有__init__.py

[英]Receiving Import Error: No Module named ***, but has __init__.py

我知道這個問題已被多次詢問,但在閱讀完之后,並提出建議的修復方法,我仍然感到難過。

我的項目結構如下:

Project
      |
      src
        |
         root - has __init__.py
            |
            nested - has __init__.py
                  |
                  tests - has __init__.py
                  |
                  utilities - has __init__.py
                  |
                  services - has __init__.py

我已成功運行Eclipse的單元測試回歸類,沒有任何問題。

一旦我嘗試從命令行運行相同的類(因為將運行該套件的其他用戶無權訪問Eclipse),我收到錯誤:

ImportError: No module named 'root'

從上面可以看出,模塊根目錄有__init__.py所有__init__.py模塊都是空的。

我們將非常感激地提供援助。

嘗試將sys.path.append添加到導入列表中。

import sys
sys.path.append("/Project/src/")
import root
import root.nested.tests

對於任何到達此問題的人來說,使用Gus E在接受答案中顯示的內容以及一些進一步的經驗我發現以下內容非常有用,以確保我可以從我的機器上的命令行運行我的程序如果需要,或在另一位同事身上。

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))

當我執行位於'嵌套'目錄中的'main'方法時,它確保在執行時將'src'目錄添加到PYTHONPATH,這意味着所有后續導入都不會引發錯誤。

顯然,你需要調整os.path.join()方法的“..”參數的數量,這是由程序中執行主方法的位置決定的。

如果有人在這里降落:

我也遇到了這個錯誤。 在我的例子中,我在path.sys.append(...)使用~/my/path/ ,修復程序用顯式路徑名替換~ (如果你在linux上輸入pwd ,可以查詢它) shell,或者使用os.path.expanduser(..)

另一種在沒有路徑的情況下解決這個問題的方法如下:考慮以下代碼,在文件夾名稱'app'中你有3個文件x.py,y.py和一個空的init .py。 因此,要運行x.py,您需要從y導入,以便:

x.py

from app.y import say_hi
print ("ok x is here")
say_hi()

y.py

print ("Im Y")
def say_hi():
    print ("Y says hi")

所以文件夾結構如下所示:

testpy
       app
           __init__.py
           x.py
           y.py

解決方案:在應用程序BEFORE文件夾中執行以下操作:

$ python -m app.x

注意:我沒有使用x.py(只是app.x)

結果:

Nespresso@adhg MINGW64 ~/Desktop/testpy
$ python -m app.x
Im Y
ok x is here
Y says hi

暫無
暫無

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

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