gpt4 book ai didi

python - 在docker中运行tornado python : ModuleNotFoundError: No module named '__main__.config' ; '__main__' is not a package

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:57 25 4
gpt4 key购买 nike

我有一个 Tornado 应用程序,其文件结构如下:

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: can't open file 'projectfolder/main.py': [Errno 2] No such file or directory

我猜你在最小化问题时犯了一些错误,因为 COPY 。 . 不会复制 projectfolder,而是复制 projectfolder 的内容。

2.回到您的问题:

ModuleNotFoundError: No module named '__main__.config'; '__main__' is not a package

这里,python find __name____main__,这意味着调用 from .config import Config 的脚本是顶级脚本,而不是在一个包。

并且相对导入只能在包内使用,不能在包外使用。因此,您只需将 from .config import Config 更改为 from config import Config,删除 . 这意味着相对导入就可以解决您的问题。

关于python - 在docker中运行tornado python : ModuleNotFoundError: No module named '__main__.config' ; '__main__' is not a package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56133142/

25 4 0