当前位置: 代码网 > it编程>前端脚本>Python > 在python项目的docker镜像里如何使用pdm管理依赖

在python项目的docker镜像里如何使用pdm管理依赖

2024年08月12日 Python 我要评论
前言在 djangostarter 项目中,我已经使用 pdm 作为默认的包管理器,不再直接使用 pip所以部署的时候 dockerfile 和 docker-compose 配置也得修改一下。doc

前言

在 djangostarter 项目中,我已经使用 pdm 作为默认的包管理器,不再直接使用 pip

所以部署的时候 dockerfile 和 docker-compose 配置也得修改一下。

dockerfile

首先修改一下 dockerfile

arg python_base=3.11
from python:$python_base
# 设置 python 环境变量
env pythonunbuffered=1
# 禁用更新检查
env pdm_check_update=false
# 设置国内源
run pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple/ && \
    # 安装 pdm
    pip install -u pdm && \
    # 配置镜像
    pdm config pypi.url "https://mirrors.cloud.tencent.com/pypi/simple/"
# 复制文件
copy pyproject.toml pdm.lock readme.md /project/
copy . /project/
# 安装依赖项和项目到本地包目录
workdir /project
run pdm install --check --prod --no-editable && \
    pip install uwsgi
env path="/project/.venv/bin:$path"

这里有几点需要注意的:

  • 如果要使用 uwsgi 则必须使用不带 slim 的python镜像,因为 uwsgi 的编译依赖gcc,slim镜像没有
  • pdm默认会创建虚拟环境,既然是在 docker 镜像里,也可以不需要虚拟环境,这时候可以使用 pdm config python.use_venv false 配置禁用虚拟环境
  • 最后一行的环境变量配置很重要,必须把 pdm 创建的虚拟环境加入path,后面在 compose 里执行才能使用正确的环境

docker-compose 配置

老规矩,先上配置,然后注意事项在后面。

services:
  redis:
    image: redis
    restart: unless-stopped
    container_name: $app_name-redis
    expose:
      - 6379
    networks:
      - default
  web:
    container_name: $app_name
    restart: always
    build: .
    environment:
      - environment=docker
      - url_prefix=
      - debug=true
    command: pdm run ./src/manage.py runserver 0.0.0.0:8000
    # command: uwsgi uwsgi.ini
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - redis
    networks:
      - default
      - swag
networks:
  default:
    name: $app_name
  swag:
    external: true

注意:

  • 新版的 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 里使用也没有遇到什么奇奇怪怪的问题,好评👍

参考资料

到此这篇关于在python项目的docker镜像里使用pdm管理依赖的文章就介绍到这了,更多相关python pdm管理依赖内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com