[英]Python multi-level imports is not working
考慮這個文件夾結構
│ main.py
│
+---src
│ +---functions
│ │ │ hello.py
│ │
│ +---models
│ │ hello_model.py
主文件
from src.functions.hello import http_message
if __name__ == "__main__":
print(http_message("This is a test message").message)
你好.py
from models.hello_model import HttpMessageModel
def http_message(message: str) -> HttpMessageModel:
return HttpMessageModel(
message=message,
code=200,
)
你好_model.py
from dataclasses import dataclass
@dataclass
class HttpMessageModel:
message: str
code: int
如果我啟動py main.py
我會收到此錯誤消息
Traceback (most recent call last):
File "main.py", line 1, in <module>
from src.functions.hello import http_message
File "L:\wamp64\www\GITHUB\create-python-app\src\functions\hello.py", line 1, in <module>
from models.hello_model import HttpMessageModel
ModuleNotFoundError: No module named 'models
在這種特殊情況下,我如何處理導入(使用命名空間?)
完整代碼示例: https ://github.com/TheSmartMonkey/create-python-app
問題的解決方案發布在此處(作為拉取請求),您可以自由接受:
主要問題是您沒有添加src.
模塊src/functions/hello.py
路徑上的模塊。
前:
from models.hello_model import HttpMessageModel
后:
from src.models.hello_model import HttpMessageModel
此外,在運行 main.py(在我的情況下使用 python3 main.py)之后,我得到了這個輸出:
hello world !
4
This is a test message
此外,測試(總共 2 個)正確結束,我沒有嘗試覆蓋測試。
您的 hello.py 位於函數文件夾中,只需在 hello.py 中添加“..”即可:
from ..models.hello_model import HttpMessageModel
在 hello.py 中執行導入時,它將從函數文件夾中拉出執行范圍,因此您在 hello.py 中的預期導入將正常工作。 我剛剛試了一下,我可以看到輸出。
PS:我是 Ubuntu 20.04 用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.