簡體   English   中英

Python多級導入不起作用

[英]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

問題的解決方案發布在此處(作為拉取請求),您可以自由接受:

創建-python-app-PR

主要問題是您沒有添加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.

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