You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker中Python镜像安装paramiko后仍出现ModuleNotFoundError问题求助

Docker中Python镜像安装paramiko后仍出现ModuleNotFoundError问题求助

我遇到了一个特别费解的问题:明明在Docker镜像构建过程中,日志明确显示paramiko已经成功安装,但运行容器时却一直抛出ModuleNotFoundError: No module named 'paramiko',实在摸不清哪里出了问题,求各位帮忙分析排查!

先梳理下我的操作和现状:

  • paramiko已经添加到requirements.txt中,Dockerfile里通过RUN pip3 install -r requirements.txt --prefer-binary命令安装依赖
  • 我还尝试过用apk add py3-paramiko直接通过系统包管理器安装,结果依然报错
  • docker-compose的构建日志里清晰列出了成功安装的依赖,其中就包括paramiko-3.3.1

Successfully installed Django-4.1.3 PyNaCl-1.5.0 asgiref-3.7.2 bcrypt-4.0.1
beautifulsoup4-4.12.2 certifi-2023.7.22 cffi-1.16.0 charset-normalizer-3.2.0
cryptography-41.0.4 django-auth-ldap-4.5.0 django-bootstrap-v5-1.0.11 djangoajax-3.3
dnspython-2.4.2 gunicorn-21.2.0 idna-3.4 multiping-1.1.2
mysql-connector-python-8.0.29 packaging-23.1 paramiko-3.3.1 protobuf-4.24.3
pyasn1-0.5.0 pyasn1-modules-0.3.0 pycparser-2.21 python-ldap-3.4.3 requests-2.31.0
soupsieve-2.5 sqlparse-0.4.4 urllib3-2.0.5

但容器启动后,却触发了如下错误栈:

web_1  |   File "/usr/local/lib/python3.9/site-packages/django/urls/conf.py", line 38, in include
web_1  |     urlconf_module = import_module(urlconf_module)
web_1  |   File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
web_1  |     return _bootstrap._gcd_import(name[level:], package, level)
web_1  |   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
web_1  |   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
web_1  |   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
web_1  |   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
web_1  |   File "<frozen importlib._bootstrap_external>", line 850, in exec_module
web_1  |   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
web_1  |   File "/usr/src/app/emailflow/urls.py", line 2, in <module>
web_1  |     from . import views
web_1  |   File "/usr/src/app/emailflow/views.py", line 3, in <module>
web_1  |     from . import main
web_1  |   File "/usr/src/app/emailflow/main.py", line 7, in <module>
web_1  |     import paramiko
web_1  | ModuleNotFoundError: No module named 'paramiko'

附上我的Dockerfile内容:

# pull official base image
FROM python:3.9.0-alpine

RUN apk update \
&& apk add --virtual build-deps gcc python3-dev musl-dev \
&& apk add postgresql-dev alpine-sdk bash build-base \
&& pip3 install psycopg2 \
&& apk del build-deps

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apk add build-base openldap-dev python3-dev

# install dependencies
RUN pip3 install --upgrade pip
COPY ./requirements.txt .
RUN pip3 install -r requirements.txt --prefer-binary

# copy entrypoint.sh
COPY ./entrypoint.sh .
RUN sed -i 's/\r$//g' /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh

# copy project
COPY . .

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

补充说明:我的entrypoint.sh只做了数据库迁移、创建超级用户这类常规初始化操作,应该不会影响依赖的加载。

真心希望各位大佬能帮忙找出问题根源,万分感谢!

备注:内容来源于stack exchange,提问作者WernerDrasche

火山引擎 最新活动