[英]Cannot get an absolute import to work with python 3.7.0
我有一個名為 dumdum 的根文件夾,其中包含一個init和一個名為 foo 的文件夾。 在 foo 中有一個ini和兩個模塊,foo1 和 foo6。
dumdum/
__init__
foo/
__init__
foo1
foo6
我希望 foo6 在單獨調用時以及當根文件夾 dumdum 中的主模塊調用它時工作,所以我一直在嘗試弄清楚如何讓 foo6 在所有情況下工作,即我希望 foo6 自己工作當它不是主文件時。 我從 IDE 運行 foo6。 Foo6 調用 foo1,但是當我這樣做時,我得到一個錯誤:
ModuleNotFoundError 沒有名為“foo”的文件夾
由於 foo 是 foo1 和 foo6 的父文件夾,我不明白為什么會這樣。
foo1.py:
def printy(msg):
print(msg)
def printing_mystr(mystr):
printy(mystr)
if __name__ == "__main__":
print(__name__)
printing_mystr(r"I am a string in foo_1")
foo6.py
import sys, pathlib
import os
if __name__ == "__main__":
# if foo is the root folder
print(os.getcwd())
print(str(pathlib.Path(__file__).parent))
sys.path.append(str(pathlib.Path(__file__).parent))
#for i in sys.path:
#print(i)
from foo.foo1 import printy, printing_mystr
if __name__ == "__main__":
print(__name__)
printing_mystr("Oh I am a string passed into foo_1")
當我運行時:
import sys
for i in sys.path:
print(i)
我得到:
C:\Users\priper\AppData\Local\Programs\Python\Python37\python37.zip
C:\Users\priper\AppData\Local\Programs\Python\Python37\DLLs
C:\Users\priper\AppData\Local\Programs\Python\Python37\Lib
C:\Users\priper\AppData\Local\Programs\Python\Python37
C:\Users\priper\AppData\Local\Programs\Python\Python37\Lib\site-packages
C:\Users\priper\AppData\Local\Programs\Python\Python37\lib\site-packages\win32
C:\Users\priper\AppData\Local\Programs\Python\Python37\lib\site-packages\win32\lib
C:\Users\priper\AppData\Local\Programs\Python\Python37\lib\site-packages\Pythonwin
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
C:\Users\priper\Desktop\dumdum\foo
追溯
ModuleNotFoundError no module named 'foo' in foo6.py ...第 12 行
在沒有任何進一步的路徑信息的情況下導入模塊時,您需要將模塊位置正下方的路徑作為sys.path
的成員。 在您的情況下,將C:\Users\priper\Desktop\dumdum
添加到sys.path
。
如果你在 dumdum dumdum\foo\foo6
文件夾中啟動 python 程序,那么os.getcwd()
會給你dumdum\foo\foo6
。 因此,您from foo.foo1 import printy, printing_mystr
的導入將不起作用。 即使添加pathlib.Path(__file__).parent
也是不夠的,因為這是dumdum\foo
而不是應該的\dumdum
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.