簡體   English   中英

我對 python 導入感到困惑

[英]I'm getting confused with python imports

我有以下項目結構:

在此處輸入圖像描述

blog_posts.py中,我有以下 function 和路由器:

# blog_post.py

router = APIRouter(
    prefix="/blog",
    tags=["blog"]
)

def required_functionality():
    return {"message": "Learning FastAPI is important"}

blog_get.py我還有一個路由器並導入required_functionality function:

# blog_get.py

from blog_posts import required_functionality

router = APIRouter(
    prefix="/blog",
    tags=["blog"]
)

a = required_functionality()

最后在main.py導入兩個路由器:

# main.py

from router import blog_get, blog_posts

app = FastAPI()
app.include_router(blog_get.router)
app.include_router(blog_posts.router)

如果我然后運行 main.py,我會收到以下錯誤:

Traceback (most recent call last):
  File "C:\Users\UKGC\PycharmProjects\FastAPI\Routers\main.py", line 6, in <module>
    from router import blog_get, blog_posts
  File "C:\Users\UKGC\PycharmProjects\FastAPI\Routers\router\blog_get.py", line 4, in <module>
    from blog_posts import required_functionality
ModuleNotFoundError: No module named 'blog_posts'

如果我然后將blog_get.py中的導入更改為:

# blog_get.py

from router.blog_posts import required_functionality

router = APIRouter(
    prefix="/blog",
    tags=["blog"]
)

a = required_functionality()

並再次運行main.py我沒有問題,但是,如果我直接運行blog_get.py我會收到以下錯誤:

Traceback (most recent call last):
  File "C:\Users\UKGC\PycharmProjects\FastAPI\Routers\router\blog_get.py", line 4, in <module>
    from router.blog_posts import required_functionality
ModuleNotFoundError: No module named 'router'

我怎樣才能讓main.pyblog_get.py都工作? 顯然我似乎沒有正確理解 python 導入,有人可以解釋我缺少的內容嗎?

我試過將路由器轉換為 package,我試過相對導入。

您應該使用相對導入,而不是絕對導入

# blog_get.py

from .blog_posts import required_functionality

當您執行main.py時,您的模塊搜索路徑上沒有包含blog_posts.py的目錄。 但是一個模塊router.blog_postsblog_get (它試圖導入blog_posts )也在 package router中。

為了能夠運行這兩個腳本並使它們正常工作,我需要在從main.py導入時將“路由器”append 添加到sys.path 這是一個有點老套的解決方案,我仍然對其他解決方案持開放態度嗎?

# main.py
from router import blog_get, blog_posts

app = FastAPI()
app.include_router(blog_get.router)
app.include_router(blog_posts.router)

# blog_get.py
import os
import sys
fpath = os.path.dirname(__file__)
sys.path.append(fpath)

from blog_posts import required_functionality

router = APIRouter(
    prefix="/blog",
    tags=["blog"]
)

a = required_functionality()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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