在 python 项目的 docker 镜像里使用 pdm 管理依赖
前言
在 DjangoStarter 项目中,我已经使用 pdm 作为默认的包管理器,不再直接使用 pip
所以部署的时候 dockerfile 和 docker-compose 配置也得修改一下。
dockerfile
首先修改一下 dockerfile
这里有几点需要注意的:
如果要使用 uwsgi 则必须使用不带 slim 的 Python 镜像,因为 uwsgi 的编译依赖 gcc,slim 镜像没有
pdm 默认会创建虚拟环境,既然是在 docker 镜像里,也可以不需要虚拟环境,这时候可以使用
pdm config python.use_venv false
配置禁用虚拟环境最后一行的环境变量配置很重要,必须把 pdm 创建的虚拟环境加入 PATH,后面在 compose 里执行才能使用正确的环境
docker-compose 配置
老规矩,先上配置,然后注意事项在后面。
注意:
新版的 compose 已经不要求配置文件版本号了,所以第一行的 version 可以去掉。
所有的容器都加上了 container_name 配置,其中的容器名称放在环境变量里配置,我的方案是在根目录里创建
.env
文件来存放环境变量。也可以在命令行里指定。网络名称也是按照环境变量的
APP_NAME
来,这点同上。这里的入口命令改成了
pdm run ./src/manage.py runserver 0.0.0.0:8000
,使用pdm run
可以自动启用虚拟环境。uwsgi 版本可以使用,不过这个 compose 里的配置不带 NGINX 容器,后面整个项目启动之后,swag 也是个容器,那边对项目里的静态文件不好处理。所以还是得在 compose 里带上个 NGINX 或者是 candy 之类的轻量级 web 服务器(其实 NGINX 就很轻了)
小结
就这样了,就是几个细节的地方
说起来 pdm 使用比 poetry 顺畅很多,在 docker 里使用也没有遇到什么奇奇怪怪的问题,好评👍
文章转载自:DealiAxy
评论