'rest_framework_nested.routers' 错误仅在 Docker
'rest_framework_nested.routers' error in Docker only
我正在尝试通过 docker 部署 Django 应用程序,但我对这个问题感到困惑。当我在本地 运行 我的应用程序时,我没有任何问题,但是当我部署到 Docker 时,我收到此错误:
AttributeError: module 'rest_framework_nested.routers' has no attribute 'NestedDefaultRouter'
堆栈跟踪的最后几行如下所示:
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/= /app/store/urls.py", line 13, in <module>
modules_router = routers.NestedDefaultRouter(router, 'modules', lookup='module')
AttributeError: module 'rest_framework_nested.routers' has no attribute 'NestedDefaultRouter'
产生错误的文件如下所示:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from rest_framework_nested import routers
from . import views
router = DefaultRouter()
router.register('modules', views.ModuleViewSet, basename='modules')
modules_router = routers.NestedDefaultRouter(router, 'modules', lookup='module')
我的 Docker 文件如下所示:
FROM python:3.9.9-slim
#Set up user
RUN apt-get update
RUN apt-get -y install sudo
RUN addgroup app && adduser -system app -ingroup app
USER app
WORKDIR = /app
#Environment settings`
ENV PYTHONUNBUFFERED=1
#Install MySQL and dependencies
RUN sudo apt-get -y install python3.9-dev
RUN sudo apt-get -y install default-libmysqlclient-dev
RUN sudo apt-get -y install build-essential libssl-dev libffi-dev
RUN sudo apt-get -y install libxml2-dev libxslt1-dev zlib1g-dev
RUN pip install mysqlclient
RUN sudo apt-get -y install default-mysql-server
RUN sudo apt-get -y install gunicorn3
#Copy files and install other dependencies
COPY . .
RUN pip3 install -r requirements.txt
我已经在网上拖网搜索了几个小时,但运气不佳。除非我遗漏了一些非常明显的东西,否则似乎有点异常。
运行 相同的代码库相同的设置文件等在本地没有问题。而且,是的,drf-nested-routers==0.93.4
在需求文件中。当我在 docker 环境中 运行 pip3 install drf-nested-routers
时,我发现需求已经满足。
所以我设法找到了这个问题。
NestedDefaultRouter
是 rest_framework_nested
中安装 drf-nested-routers
软件包时附带的方法。出于某种原因,我还安装了 django-rest-framework-nested
包。这似乎是问题所在。卸载后 django-rest-framework-nested
图像启动没有问题。
它在本地工作而不是在 Docker 中工作的事实可能是由于安装顺序问题。无论如何,现在修复了。
我正在尝试通过 docker 部署 Django 应用程序,但我对这个问题感到困惑。当我在本地 运行 我的应用程序时,我没有任何问题,但是当我部署到 Docker 时,我收到此错误:
AttributeError: module 'rest_framework_nested.routers' has no attribute 'NestedDefaultRouter'
堆栈跟踪的最后几行如下所示:
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/= /app/store/urls.py", line 13, in <module>
modules_router = routers.NestedDefaultRouter(router, 'modules', lookup='module')
AttributeError: module 'rest_framework_nested.routers' has no attribute 'NestedDefaultRouter'
产生错误的文件如下所示:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from rest_framework_nested import routers
from . import views
router = DefaultRouter()
router.register('modules', views.ModuleViewSet, basename='modules')
modules_router = routers.NestedDefaultRouter(router, 'modules', lookup='module')
我的 Docker 文件如下所示:
FROM python:3.9.9-slim
#Set up user
RUN apt-get update
RUN apt-get -y install sudo
RUN addgroup app && adduser -system app -ingroup app
USER app
WORKDIR = /app
#Environment settings`
ENV PYTHONUNBUFFERED=1
#Install MySQL and dependencies
RUN sudo apt-get -y install python3.9-dev
RUN sudo apt-get -y install default-libmysqlclient-dev
RUN sudo apt-get -y install build-essential libssl-dev libffi-dev
RUN sudo apt-get -y install libxml2-dev libxslt1-dev zlib1g-dev
RUN pip install mysqlclient
RUN sudo apt-get -y install default-mysql-server
RUN sudo apt-get -y install gunicorn3
#Copy files and install other dependencies
COPY . .
RUN pip3 install -r requirements.txt
我已经在网上拖网搜索了几个小时,但运气不佳。除非我遗漏了一些非常明显的东西,否则似乎有点异常。
运行 相同的代码库相同的设置文件等在本地没有问题。而且,是的,drf-nested-routers==0.93.4
在需求文件中。当我在 docker 环境中 运行 pip3 install drf-nested-routers
时,我发现需求已经满足。
所以我设法找到了这个问题。
NestedDefaultRouter
是 rest_framework_nested
中安装 drf-nested-routers
软件包时附带的方法。出于某种原因,我还安装了 django-rest-framework-nested
包。这似乎是问题所在。卸载后 django-rest-framework-nested
图像启动没有问题。
它在本地工作而不是在 Docker 中工作的事实可能是由于安装顺序问题。无论如何,现在修复了。