我有一个龙卷风应用程序,其文件结构如下:
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最佳做法在其他文件中重新构建文件
谢谢!
答案 0 :(得分:0)
1。。我猜您有一个ENTRYPOINT ["python3", "projectfolder/__main__.py"]
的错字,应该是ENTRYPOINT ["python3", "src/__main__.py"]
,否则您将得到:
python3:无法打开文件'projectfolder / main .py':[错误2]没有这样的文件或目录
我想您在问最少问题时就犯了一个错误,因为COPY . .
不会复制projectfolder
,而是复制projectfolder
的内容。
2。。返回您的问题:
ModuleNotFoundError:没有名为“ __main __。config”的模块; “ __main__”不是软件包
在这里,python查找__name__
是__main__
,这意味着调用from .config import Config
的脚本是顶级脚本,而不是程序包。
relative import
仅可用于包内,不能用于包外。因此,您可以将from .config import Config
更改为from config import Config
,删除.
,这意味着相对导入可以解决您的问题。