簡體   English   中英

在父文件夾或祖父文件夾中引用自定義模塊會導致 Python 中出現“ModuleNotFoundError: No module named”

[英]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://www.learnpython.org/en/Modules_and_Packages#:~:text=Modules%20in%20Python%20are%20simply,or%20variables%20defined%20and%20implemented

編輯:我剛剛發現了這個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.

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