在python项目的docker镜像里使用pdm管理依赖 - 程序设计实验室

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

在DjangoStarter项目中,使用pdm作为默认的包管理器,修改dockerfile和docker-compose配置。dockerfile中设置Python环境变量、禁用更新检查、安装pdm并配置镜像。docker-compose配置redis和web服务,web服务使用pdm运行项目。建议使用不带slim的Python镜像来使用uwsgi,可以禁用pdm创建的虚拟环境。

🔎

延伸解读

镜像选择与依赖编译的权衡

文章指出,若需使用uwsgi,必须选择不带slim的Python镜像,因为uwsgi编译依赖gcc,而slim镜像未包含。这提醒读者在构建镜像时需权衡镜像体积与功能需求:slim镜像虽小,但可能缺少编译工具,导致无法安装需要编译的包。若坚持使用slim,则需额外安装gcc等构建依赖,可能抵消体积优势。

虚拟环境在容器中的取舍

pdm默认创建虚拟环境,但在Docker镜像中,可通过pdm config python.use_venv false禁用。禁用后,依赖将安装到系统Python环境,简化路径管理。但文章也强调,若保留虚拟环境,必须将.venv/bin加入PATH,否则后续命令无法找到正确解释器。读者应根据镜像用途决定是否禁用,若追求轻量且无需隔离,禁用是合理选择。

compose配置的实用细节

新版docker-compose已不要求version字段,可省略。文章使用container_name和环境变量(如$APP_NAME)统一命名容器与网络,便于管理。入口命令采用pdm run,可自动激活虚拟环境(若未禁用)。此外,作者建议添加NGINX等轻量级web服务器处理静态文件,因为swag容器对项目静态文件支持不佳。这些细节有助于读者编写更清晰的compose文件。

❓

Q&A

如何在Docker镜像中使用pdm管理Python依赖?

在Docker镜像中使用pdm管理依赖需要修改dockerfile和docker-compose配置,设置Python环境变量,禁用更新检查,并安装pdm。

为什么建议使用不带slim的Python镜像?

建议使用不带slim的Python镜像是因为uwsgi的编译依赖gcc,而slim镜像不包含gcc。

如何在docker-compose中配置web服务?

在docker-compose中配置web服务时,需要设置container_name、环境变量,并使用pdm运行项目,例如使用命令pdm run ./src/manage.py runserver。

如何禁用pdm创建的虚拟环境?

可以通过pdm config python.use_venv false配置来禁用pdm创建的虚拟环境,适合在docker镜像中使用。

docker-compose中如何处理静态文件?

建议在docker-compose中添加NGINX或其他轻量级web服务器,以便更好地处理项目中的静态文件。

新版docker-compose有什么变化?

新版docker-compose不再要求配置文件版本号,因此可以去掉第一行的version配置。

🏷️

标签

➡️

继续阅读