在python項目的docker鏡像里如何使用pdm管理依賴
前言
在 DjangoStarter 項目中,我已經(jīng)使用 pdm 作為默認(rèn)的包管理器,不再直接使用 pip
所以部署的時候 dockerfile 和 docker-compose 配置也得修改一下。
dockerfile
首先修改一下 dockerfile
ARG PYTHON_BASE=3.11 FROM python:$PYTHON_BASE # 設(shè)置 python 環(huán)境變量 ENV PYTHONUNBUFFERED=1 # 禁用更新檢查 ENV PDM_CHECK_UPDATE=false # 設(shè)置國內(nèi)源 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/" # 復(fù)制文件 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默認(rèn)會創(chuàng)建虛擬環(huán)境,既然是在 docker 鏡像里,也可以不需要虛擬環(huán)境,這時候可以使用
pdm config python.use_venv false
配置禁用虛擬環(huán)境 - 最后一行的環(huán)境變量配置很重要,必須把 pdm 創(chuàng)建的虛擬環(huán)境加入PATH,后面在 compose 里執(zhí)行才能使用正確的環(huán)境
docker-compose 配置
老規(guī)矩,先上配置,然后注意事項在后面。
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 已經(jīng)不要求配置文件版本號了,所以第一行的 version 可以去掉。
- 所有的容器都加上了 container_name 配置,其中的容器名稱放在環(huán)境變量里配置,我的方案是在根目錄里創(chuàng)建
.env
文件來存放環(huán)境變量。也可以在命令行里指定。 - 網(wǎng)絡(luò)名稱也是按照環(huán)境變量的
APP_NAME
來,這點同上。 - 這里的入口命令改成了
pdm run ./src/manage.py runserver 0.0.0.0:8000
,使用pdm run
可以自動啟用虛擬環(huán)境。 - uwsgi 版本可以使用,不過這個 compose 里的配置不帶 NGINX 容器,后面整個項目啟動之后,swag也是個容器,那邊對項目里的靜態(tài)文件不好處理。所以還是得在 compose 里帶上個 NGINX 或者是 candy 之類的輕量級 web 服務(wù)器(其實NGINX就很輕了)
小結(jié)
就這樣了,就是幾個細(xì)節(jié)的地方
說起來 pdm 使用比 poetry 順暢很多,在 docker 里使用也沒有遇到什么奇奇怪怪的問題,好評??
參考資料
到此這篇關(guān)于在python項目的docker鏡像里使用pdm管理依賴的文章就介紹到這了,更多相關(guān)python pdm管理依賴內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 實現(xiàn)異步調(diào)用函數(shù)的示例講解
今天小編就為大家分享一篇Python 實現(xiàn)異步調(diào)用函數(shù)的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10python用for循環(huán)求和的方法總結(jié)
在本篇文章里小編給各位分享了關(guān)于python用for循環(huán)求和的方法以及相關(guān)實例代碼,需要的朋友們參考學(xué)習(xí)下。2019-07-07Python?Playwright進(jìn)行常見的頁面交互操作
在使用?Playwright?進(jìn)行?Web?自動化時,頁面交互是核心操作之一,本文將詳細(xì)介紹如何使用?Playwright?進(jìn)行常見的頁面交互操作,希望對大家有所幫助2024-10-10