首页 > 数据库 >使用python-slim镜像遇到无法使用PostgreSQL的问题

使用python-slim镜像遇到无法使用PostgreSQL的问题

时间:2024-08-20 16:15:35浏览次数:8  
标签:python3.11 PostgreSQL python psycopg2 slim 镜像 Debian

前言

之前不是把 DjangoStarter 的 docker 方案重新搞好了吗

一开始demo部署是使用 SQLite 数据库的,用着没问题,但很快切换到 PostgreSQL 的时候就遇到问题了…

报错

docker 启动之后,app 容器报错

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 or psycopg module

排错

一开始我还以为是 psycopg2 库装不上,或者是在 python_builder 阶段的依赖没有正确复制到 final 阶段的容器,但后面改了几个地方,重新试了一下都不行。

接下来使用 python src/manage.py shell 进入 shell,测试一下能否导入 psycopg2

>>> import psycopg2
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/project/.venv/lib/python3.11/site-packages/psycopg2/__init__.py", line 51, in <module>
    from psycopg2._psycopg import (                     # noqa
ImportError: libpq.so.5: cannot open shared object file: No such file or directory

好的,经常被 docker 坑的人应该已经看出问题出在系统环境上了

不使用 slim 镜像换成普通的 python 镜像就正常了…

解决

OK,既然找出问题原因,那么就可以来着手解决了。

使用 psycopg2-binary

最简单的方法就是将 psycopg2 库换成 psycopg2-binary,这是一个预编译的 psycopg2 包,不需要编译环境,安装更简便。

手动安装 libpq 库

既然缺了 libpq 库,那就在 docker 镜像里安装。

这个方法我还没测试,又麻烦又不优雅

# 使用 Python 3.11 slim 基础镜像
FROM python:3.11-slim

# 安装 psycopg2 依赖
RUN apt-get update && apt-get install -y \
    libpq-dev \
    gcc \
    # 清理缓存以减少镜像大小
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

不同的python基础镜像

python镜像基于 Debian 系统,默认是用 Debian 的最新稳定版,也可以自己指定版本,比如 python3.11-slim-bookworm 就是指定用 Debian 12 ("bookworm") 作为基础镜像

  • python3.11-slim-bookworm 基础镜像打包出来的镜像大小是424MB,python3.11-slim 打包出来也是这个大小
  • 使用 python3.11 基础镜像打包出来就到 1.3G 了,大小直接翻了几倍

还可以选择 alpine 镜像,不过可能会遇到更多兼容性问题,我就不折腾了,心累。

小结

一般选 slim 镜像还是可以的,基于 Debian 不怎么需要担心兼容性问题

偶尔遇到小问题还是比较好解决的

alpine 镜像不一样的地方就很多了,太折腾了…

标签:python3.11,PostgreSQL,python,psycopg2,slim,镜像,Debian
From: https://www.cnblogs.com/deali/p/18369637

相关文章

  • PostgreSQL的pg_dump测试
    PostgreSQL的pg_dump测试使用到的参数,更多的参数可以通过pg_dump--help查看。-hhost,指定数据库主机名,或者IP-pport,指定端口号-Uuser,指定连接使用的用户名-W,按提示输入密码-d,指定连接的数据库名称,实际上也是要备份的数据库名称。-a,–data-only,只导出数据,不导出表......
  • Python学习日记(Page.3)
    今日整理方便日后回顾。如有错误欢迎指正。  今天总结一下字符串扩展的内容。第一部分字符串的三种定义方式 单引号name='黑马'   2.双引号name="黑马"   3.三引号name="""黑马"""注:单引号可包含双引号,但不能包含单引号双引号可包含单......
  • CentOS Python 3.12安装
    之前从来没想到我会在安装Python这点上卡住,事实上最近就是在一个CentOS测试机上安装Python时遇到了问题,因此记一下。以往我们使用yum安装python时非常简单:yuminstallpythonoryuminstallpython3最多额外再加装个pip以及python-devel,就算需要某个特定的、yum无法覆盖的......
  • python环境安装之后,cmd输入python回车会打开微软商店
    坑爹!python环境安装之后,cmd输入python回车会打开微软商店最近发现,安装python环境成功之后,可能会出现cmd输入python验证是否安装成功老会打开微软商店!解决,打开系统环境配置,找到刚安装python环境的时候加入的python安装路径你会发现这个windowsapp在python安装目录前面,把w......
  • 在Python中使用MySQL:保姆级指南
    Python是一种广泛使用的高级编程语言,因其简洁易读以及强大的库支持而受到开发者的青睐。当需要在Python程序中处理数据库时,MySQL是一个流行的选择。MySQL是一个开源的关系数据库管理系统,广泛用于Web应用程序的开发。目录第一步:安装MySQL数据库第二步:安装MySQLConnector第......
  • python实用教程(二):安装配置Pycharm及使用(Win10)
    上一篇:python实用教程(一):安装配置anaconda(Win10)-CSDN博客1、简介及下载PyCharm是一款功能强大的Python编辑器,具有跨平台性。是Jetbrains家族中的一个明星产品。下载地址:DownloadPyCharm:ThePythonIDEfordatascienceandwebdevelopmentbyJetBrains由于个人用......
  • LeetCode-Python-3154. 到达第 K 级台阶的方案数(DFS + 数学)
    给你有一个 非负 整数 k 。有一个无限长度的台阶,最低 一层编号为0。Alice 有一个整数 jump ,一开始值为0。Alice从台阶1开始,可以使用 任意 次操作,目标是到达第 k 级台阶。假设Alice位于台阶 i ,一次 操作 中,Alice可以:向下走一级到 i-1 ,但该操作......
  • 2024年全国青少年信息素养大赛国赛PYTHON组(C++做法)
    目录前提第一题第二题第三题第四题第五题:第六题前提鄙人是C++学生,所以将PYTHON题做为C++题,还请各位多多海涵!!!部分芝士来自度娘和其它网站温馨提示:题目顺序可能不同,请各位仔细浏览! 第一题题目描述蓝蓝最近学到了一些单词,比如orange(橘子),apple(苹果),pear(梨)。......
  • Python之因子分析详细步骤
    1.数学原理1.1数学模型1.2正交因子模型假设注意:下面的推导都是基于这一假设。因此,这里的模型都是属于正交因子模型。1.3正交因子模型的协方差结构1.4各类方差贡献的介绍    在1.3正交因子模型的协方差结构中,我们介绍了“方差贡献”,下面给出关于“方差贡献”......
  • 四:《Python基础语法汇总》— 列表&元组&集合
    一:列表​列表是Python中最基本的数据类型之一,是可以存放多个多种元素的容器​列表是Python中序列的一种,是一个有序可变序列​由于列表是可变序列,所以可以对其里面的内容进行修改,无需重新开辟空间存储1.下标与切片:​列表中也可以应用下标索引和切片,与在字符串中的应用......