msa*_*lla 6 python python-import docker
运行我的 docker 映像时,出现导入错误:
\nFile "./app/main.py", line 8, in <module>\nimport wekinator\nModuleNotFoundError: No module named 'wekinator'`\nRun Code Online (Sandbox Code Playgroud)\n如何在 Docker 中导入本地 python 模块?COPY 命令不会复制整个“app”文件夹(包括两个文件),从而保留正确的导入位置吗?
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wekinator.py\nRun Code Online (Sandbox Code Playgroud)\nFROM python:3.7\n\nRUN pip install fastapi uvicorn python-osc\n\nEXPOSE 80\n\nCOPY ./app /app\n\nCMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]\nRun Code Online (Sandbox Code Playgroud)\n
经过一番困惑后,我通过在 Dockerfile 中设置 PYTHONPATH 环境变量来运行容器:
ENV PYTHONPATH "${PYTHONPATH}:/app/"
Run Code Online (Sandbox Code Playgroud)
小智 3
这样设置PYTHONPATH是可行的,但感觉很笨拙:
ENV PYTHONPATH "${PYTHONPATH}:/app/"
Run Code Online (Sandbox Code Playgroud)
使用 DockerWORKDIR可以提供更简洁的解决方案:
FROM python:3.7
WORKDIR /code
RUN pip install fastapi uvicorn python-osc
EXPOSE 80
COPY app ./app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
Run Code Online (Sandbox Code Playgroud)
请注意声明是如何COPY改变的。
| 归档时间: |
|
| 查看次数: |
8398 次 |
| 最近记录: |