首页 > 编程语言 >在python项目的docker镜像里使用pdm管理依赖

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

时间:2024-08-11 22:38:58浏览次数:7  
标签:compose python pdm 虚拟环境 docker uwsgi

前言

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

标签:compose,python,pdm,虚拟环境,docker,uwsgi
From: https://www.cnblogs.com/deali/p/18354017

相关文章

  • Python 爬虫项目实战六:抓取猫眼电影排行榜的数据
    在这篇博客中,我们将通过一个实际的Python爬虫项目,详细讲解如何抓取网页数据。本次选择的实战项目是抓取猫眼电影排行榜的数据,通过这个项目,你将学会如何使用Python编写爬虫,从网页中提取有用的电影信息。一、项目准备在开始之前,确保你已经安装了Python和以下几个关键的库:requ......
  • 装饰器模式的魔法:Python高级应用全解析
    装饰器模式的魔法:Python高级应用全解析在Python的世界里,装饰器模式以其独特的魅力,成为了函数式编程的一颗璀璨明珠。它不仅能够增强函数的功能,还能在不修改原有代码的前提下,注入新的活力。本文将深入探讨Python中的装饰器模式,从基础到高级,一探其究竟。装饰器模式的奥义装......
  • Python XmlTool
     XMLToXlsximportxml.etree.ElementTreeasETimportreimportpandasaspddefmain():tree=ET.parse("in/strings.xml")root=tree.getroot()patternKey=re.compile(r"\:\'(.+?)\'")data_list=[]......
  • 搭建docker私有仓库
    1.创建仓库镜像存放路径mkdir-p/opt/registry/registry2.生成帐号密码#安装密码生成命令htpasswd##centosyum-yinstallhttpd-tools##ubuntu/debian/deepinaptinstallapache2-utils#生成密钥文件touch/opt/registry/passwdhtpasswd-Bbnusernamepassw......
  • Python 虚拟环境安装flask框架 Read timed out.
    cmd输入workonenv_name激活pipinstallflask  升级pip:python-mpipinstall--upgradepip-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com下载包:以flask-sqlalchemy为例:方案一:pipinstallFlask方案二:pipinstallflask-sqlalchemy-ihttp:/......
  • python+opencv+selenium自动化登录邮箱并解决滑动验证的问题
    本文主要讲解基于Python、OpenCV和Selenium的自动化登录邮箱并解决滑动验证问题。在这个过程中,我们需要特别注意页面元素的准确定位以及文本框和验证码的frame嵌套问题。感兴趣的朋友们一起来学习吧,让我们一起探索解决这个挑战的方法。前言大家在进行自动化登录时可能都......
  • Python打包命令汇总
    1、pyinstaller打包环境安装:pipinstallpyinstaller 网络不好可以通过-i指定安装源:pipinstallpyinstaller-ihttps://pypi.tuna.tsinghua.edu.cn/simple/安装完成后通过:pyinstaller--version查看是否安装成功打包单个脚本:pyinstaller-F-w-ipython.icomain.py......
  • Python虚拟环境
    虚拟环境安装1:安装好Python环境https://python.p2hp.com/downloads/     双击打开后弹窗显示下图,注意此处是两张图,都看完再进行下一步,第一步点击选中第二张图的Add这个选框,第二步选择第一张图自定义路径存储Customize。  选择自定义路径后会弹出此界面,不用......
  • 大一新生初入Python第五天
    大一新生初入Python第五天前言:有天没更新就是因为学这个流程控制语句我感觉这玩意应该在前期算比较难一点的了我尽量根据自己的理解写好一点吧一.程序的三大执行流程程序的三大执行流程分别为:1.顺序执行2.选择执行3.循环执行1.顺序执行顺序执行也就是你......
  • 基于Python的大模型学习手册(入门级)
    前言大模型(全称为大语言模型,英文名称:LargeLanguageModel),这个2023年刷爆了互联网圈的“现象级明星”,几乎以前所未有的姿态,席卷了各行各业,世人一时为之惊叹。同时,也开辟了各大厂商投入AI研发的新赛道。乘着这波“西风”,国内大模型开启了雨后春笋般的神奇发育,简直是“一浪......