[英]Referencing a custom module in a parent or grandparent folder results in 'ModuleNotFoundError: No module named' in Python
用例:從低級(子文件夾)<script_name>.py 引用頂級 <module_name>.py 模塊
我的印象是可以將 python 腳本及其各自的變量導入到項目目錄中的其他腳本中,只要它們都有一個共同的主目錄。
.
└── spam/ Main directory (git repo)
├── spam/ Main project directory
│ ├── __init__.py
│ ├── ham/ Directory within main project spam/
│ │ ├── __init__.py
│ │ └── eggs.py Script within sub directory ham/
│ └── config.py Config with contents eggs.py needs
└── README.md
(注:是的,主目錄和主項目目錄同名。)
例如,我認為上面的結構會允許這種行為:使用來自配置的內容和 egg.py
#! /spam/spam/ham/eggs.py
from spam import config
嗯,不完全...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'spam'
於是我退了一步。
#! /spam/spam/ham/eggs.py
import spam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'spam'
在這一點上,我並不是在尋找解決方案(因為我發現了一些不同的解決方案,包括這里和這里(盡管解釋並沒有真正通過我厚厚的頭骨)。有人願意像我一樣向我解釋嗎?五年級學生?
我將繼續收集我認為有價值的資源來尋找我的問題的答案。 我感謝所有有助於澄清這一情況的貢獻。
探索性測試
導入適用於上述圖像。
# ../spam
# Direct import statements.
import spam
import config
# Indirect to get ham.
import spam.ham
from spam import ham
# Indirect to get eggs.
import spam.ham.eggs
from spam.ham import eggs
導入適用於上述圖像。
# ../spam/spam
# Direct import statements.
import ham
# Indirect to get eggs.
import ham.eggs
from ham import eggs
導入適用於上述圖像。
# ../spam/spam/ham
# Direct import statements.
import eggs
觀察
import <module_name>
時,會檢查當前目錄但“向后盲”更好理解的資源
*我測試並認為可以接受的解決方案。
Python 3.8.6
python 模塊不是文件夾,它是 python 文件(例如 iamapythonfile.py)
然后您的“垃圾郵件”文件夾無法解析為 python 模塊
你可以使用
import modulename.py
#or
from modulename.py import yourfunction
那么你應該關心路徑(絕對或相對)
編輯:我剛剛發現了這個https://realpython.com/absolute-vs-relative-python-imports/#:~:text=You%20need%20to%20have%20a,init__.py%20file )。 ,解釋得很好,很清楚。 享受。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.