模块未找到:rest_framework。Django + Docker。

4

我在 Django 的 Docker 容器中的虚拟环境中使用 pip 安装了 djangorestframeworkmarkdowndjango filter,并通过 pip freeze 进行了检查。在 OS X 中的绝对路径为 /Users/user/project/denv/lib/python2.7/site-packages。在 settings.py 中添加了 'rest_framework',但是在运行 docker-compose up 后仍然出现以下错误。我猜测这与路径设置有关,但不知道如何修复。

Traceback (most recent call last):
web_1  |   File "/usr/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
web_1  |     fn(*args, **kwargs)
web_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 113, in inner_run
web_1  |     autoreload.raise_last_exception()
web_1  |   File "/usr/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception
web_1  |     six.reraise(*_exception)
web_1  |   File "/usr/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
web_1  |     fn(*args, **kwargs)
web_1  |   File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
web_1  |     apps.populate(settings.INSTALLED_APPS)
web_1  |   File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
web_1  |     app_config = AppConfig.create(entry)
web_1  |   File "/usr/local/lib/python2.7/site-packages/django/apps/config.py", line 90, in create
web_1  |     module = import_module(entry)
web_1  |   File "/usr/local/lib/python2.7/importlib/__init__.py", line 37, in import_module
web_1  |     __import__(name)
web_1  | ImportError: No module named rest_framework

编辑: 命令行截图 在这里输入图片描述

编辑2: docker-compose.yml

 version: '2'
 services:
   db:
     image: postgres
   web:
     build: .
     command: python manage.py runserver 0.0.0.0:8000
     volumes:
       - .:/code
     ports:
       - "8000:8000"
     depends_on:
       - db

编辑2:我认为错误是因为应用程序实际上使用的是docker的python而不是虚拟环境的python。

有可能吗?如何将djangorestframework安装到docker的python包中或更好地使django应用程序使用自己的python?


@DanLowe 我用'source denv/bin/activate'来调用它,任何命令都要在(denv)行中调用。 - user3475724
@AllІѕVаиітy 那么如何将djangorestfrmawork安装到Docker的Python中或使应用程序使用env的Python?这很可能是问题所在。 - user3475724
@AllІѕVаиітy 好的,对我来说这并不重要。我关心的是让它工作。使用djangorestframework。无论是否使用virtualenv。你知道怎么做吗? - user3475724
2个回答

8
你不需要手动进行pip安装。在你的dockerfile中添加以下内容将会自动安装依赖项。
RUN pip install -r requirements.txt

你只需要将djangorestframework添加到你的requirements.txt文件中即可。

# previous stuff Django etc...
djangorestframework

并且运行

docker-compose up --build

它已经被激活了。并且在我安装这些东西时被激活了。 - user3475724
denv其实是我的虚拟环境。 - user3475724
这是一个Docker Django应用程序。在运行服务器之前,使用docker-compose up而不是python manage.py runserver进行激活。 - user3475724

0
你能给我们展示一下你的 Dockerfile 吗?
它应该长这样:
FROM python:2.7
ENV PYTHONUNBUFFERED 1
WORKDIR /code
ADD . /code/
RUN pip install -r requirements.txt

实际上是使用docker的python。是的,构建一个Docker镜像使用 FROM python:2.7 将会安装一个全新的Python环境。
不是virtualenv的Python。是的,除非你将你的virtualenv拷贝到Docker镜像中并在其中激活它(这是应该做的)。
它已经被激活了,在我安装这些东西的时候已经激活了。这没关系,除非你使用pip freeze > requirements.txt并在Dockerfile中使用RUN pip install -r requirements.txt,这将在 Docker 镜像的 Python 环境中的 virtualenv 中安装所有的 Python 依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接