使用python-slim镜像遇到无法使用PostgreSQL的问题及解决方法

 更新时间:2024年08月21日 09:29:38   作者:程序设计实验室  
这篇文章主要介绍了使用python-slim镜像遇到无法使用PostgreSQL的问题及解决方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

前言

之前不是把 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 镜像不一样的地方就很多了,太折腾了…

到此这篇关于使用python-slim镜像遇到无法使用PostgreSQL的问题的文章就介绍到这了,更多相关python-slim无法使用PostgreSQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostgreSQL:string_agg 多列值聚合成一列的操作示例

    PostgreSQL:string_agg 多列值聚合成一列的操作示例

    PostgreSQL中的STRING_AGG()函数是一个聚合函数,用于连接字符串列表并在字符串之间放置分隔符,这篇文章主要介绍了PostgreSQL:string_agg多列值聚合成一列,需要的朋友可以参考下
    2023-08-08
  • PostgreSQL 添加各种约束语法的操作

    PostgreSQL 添加各种约束语法的操作

    这篇文章主要介绍了PostgreSQL 添加各种约束语法的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL进行数据导入和导出的操作代码

    PostgreSQL进行数据导入和导出的操作代码

    在数据库管理中,数据的导入和导出是非常常见的操作,特别是在 PostgreSQL 中,提供了多种工具和方法来实现数据的有效管理,本文将详细介绍在 PostgreSQL 中如何进行数据导入和导出,并给出具体的命令及示例,需要的朋友可以参考下
    2024-10-10
  • PostgreSQL 主备数据宕机恢复测试方案

    PostgreSQL 主备数据宕机恢复测试方案

    这篇文章主要介绍了PostgreSQL 主备数据宕机恢复测试方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql 补齐空值、自定义查询字段并赋值操作

    postgresql 补齐空值、自定义查询字段并赋值操作

    这篇文章主要介绍了postgresql 补齐空值、自定义查询字段并赋值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL 流复制异步转同步的操作

    PostgreSQL 流复制异步转同步的操作

    这篇文章主要介绍了PostgreSQL 流复制异步转同步的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSql生产级别数据库安装要注意事项

    PostgreSql生产级别数据库安装要注意事项

    这篇文章主要介绍了PostgreSql生产级别数据库安装要注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Postgresql - 查看锁表信息的实现

    Postgresql - 查看锁表信息的实现

    这篇文章主要介绍了Postgresql 查看锁表信息的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL数据库命令行执行SQL脚本的三种方式

    PostgreSQL数据库命令行执行SQL脚本的三种方式

    生成环境中,出于安全性等原因,往往不提供数据库连接工具,所以对数据库的更新和升级就得通过命令行来实现,本文总结了三种命令行执行sql脚本的方式,需要的朋友可以参考下
    2024-02-02
  • PostgreSQL中使用数组改进性能实例代码

    PostgreSQL中使用数组改进性能实例代码

    这篇文章主要给大家介绍了关于PostgreSQL中使用数组改进性能的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12

最新评论