[英]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.py
和blog_get.py
都工作? 顯然我似乎沒有正確理解 python 導入,有人可以解釋我缺少的內容嗎?
我試過將路由器轉換為 package,我試過相對導入。
您應該使用相對導入,而不是絕對導入
# blog_get.py
from .blog_posts import required_functionality
當您執行main.py
時,您的模塊搜索路徑上沒有包含blog_posts.py
的目錄。 但是有一個模塊router.blog_posts
和blog_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.