簡體   English   中英

在docker中運行龍卷風python:ModuleNotFoundError:沒有名為'__main __。config'的模塊; '__main__'不是一個包

[英]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__.pyfrom .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.

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