![](/img/trans.png)
[英]ModuleNotFoundError: No module named '__main__.gtts'; '__main__' is not a package
[英]running tornado python in docker: ModuleNotFoundError: No module named '__main__.config'; '__main__' is not a package
我有一個具有如下文件結構的龍卷風應用程序:
projectfolder
|_ Dockerfile
|_ src
|_ __init__.py
|_ __main__.py
|_ config.py
我的dockerfile看起來像這樣:
FROM python:3.7
EXPOSE 8888
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "projectfolder/__main__.py"]
在__main__.py
我from .config import Config
當執行docker run時,我得到:
File "projectfolder/__main__.py", line 11, in <module>
from .config import Config
ModuleNotFoundError: No module named '__main__.config'; '__main__' is not a package
當我在.venv中運行項目時,它可以正常工作,但是我無法使其在docker上工作
關於如何正確導入當前文件夾中文件的任何想法? 或者我應該如何按照python最佳實踐在其他文件中重新構建文件
謝謝!
1.我猜您有一個ENTRYPOINT ["python3", "projectfolder/__main__.py"]
的錯字,應該是ENTRYPOINT ["python3", "src/__main__.py"]
,否則您將得到:
python3:無法打開文件'projectfolder / main .py':[Errno 2]沒有這樣的文件或目錄
我猜您在最小化問題時就犯了一些錯誤,因為COPY . .
COPY . .
不會復制projectfolder
,而不是內容projectfolder
。
2.回到您的問題:
ModuleNotFoundError:沒有名為“ __main __。config”的模塊; '__main__'不是一個包
在這里,python find __name__
是__main__
,這意味着from .config import Config
調用的腳本是頂級腳本,而不是在程序包中。
relative import
只能在包中使用,而不能在包外使用。 因此,您只需將from .config import Config
更改為from config import Config
,然后刪除即可.
這意味着相對導入可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.