我正在尝试使用django和在views.py文件中添加导入boto3 .
它工作完美,当我尝试它没有docker,但现在我得到这个错误:
ModuleNotFoundError: No module named 'boto3'
FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
RUN pip install boto3 -t .
COPY . /app/
ADD . /app
ENV PYTHONPATH /app
CMD [ "python", "/app/greet/views.py" ]
,这是我的docker-compose。yml文件
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
编辑:
我也试过这个,但它也不起作用,与boto3在requirements.txt
:
FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /app
ADD . /app
COPY ./requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY . /app/
您的问题是docker-compose.yml
的volumes
部分。在Dockerfile
中,您需要花费大量精力来设置/app
,包括将boto3
安装到该目录中…
…然后把你的本地目录挂载到它上面,有效地隐藏了容器中/app
中包含的所有内容形象。
解决方案是:
-
不要在
/app
上挂载任何东西。去掉volumes
部分,并在需要时重新构建映像来刷新代码。还是… -
与其将
boto3
安装到/app
中,不如将其包含在requirements.txt
并将其与其他依赖项一起安装。现在在/app
上安装一些东西不会隐藏boto3
。
我在Dockerfile中使用RUN pip install --user ...
解决了类似的问题,它将默认将模块安装到/root/.local/lib/python3.9/site-packages
而不是/usr/local/lib/python3.9/site-packages
。
我有同样的问题,由于某种原因,python在/usr/lib/python3.x/site-packages
中安装boto3而不是默认的/usr/local/lib/python3.x/site-packages
。
/usr/lib/python3.x/site-packages
这个文件夹不包含在docker容器的PYTHONPATH中,所以要么手动操作,要么将模块移到另一个文件夹