在python項(xiàng)目的docker鏡像里如何使用pdm管理依賴
前言
在 DjangoStarter 項(xiàng)目中,我已經(jīng)使用 pdm 作為默認(rèn)的包管理器,不再直接使用 pip
所以部署的時(shí)候 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/
# 安裝依賴項(xiàng)和項(xiàng)目到本地包目錄
WORKDIR /project
RUN pdm install --check --prod --no-editable && \
pip install uwsgi
ENV PATH="/project/.venv/bin:$PATH"這里有幾點(diǎn)需要注意的:
- 如果要使用 uwsgi 則必須使用不帶 slim 的Python鏡像,因?yàn)?uwsgi 的編譯依賴gcc,slim鏡像沒有
- pdm默認(rèn)會(huì)創(chuàng)建虛擬環(huán)境,既然是在 docker 鏡像里,也可以不需要虛擬環(huán)境,這時(shí)候可以使用
pdm config python.use_venv false配置禁用虛擬環(huán)境 - 最后一行的環(huán)境變量配置很重要,必須把 pdm 創(chuàng)建的虛擬環(huán)境加入PATH,后面在 compose 里執(zhí)行才能使用正確的環(huán)境
docker-compose 配置
老規(guī)矩,先上配置,然后注意事項(xiàng)在后面。
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)不要求配置文件版本號(hào)了,所以第一行的 version 可以去掉。
- 所有的容器都加上了 container_name 配置,其中的容器名稱放在環(huán)境變量里配置,我的方案是在根目錄里創(chuàng)建
.env文件來存放環(huán)境變量。也可以在命令行里指定。 - 網(wǎng)絡(luò)名稱也是按照環(huán)境變量的
APP_NAME來,這點(diǎn)同上。 - 這里的入口命令改成了
pdm run ./src/manage.py runserver 0.0.0.0:8000,使用pdm run可以自動(dòng)啟用虛擬環(huán)境。 - uwsgi 版本可以使用,不過這個(gè) compose 里的配置不帶 NGINX 容器,后面整個(gè)項(xiàng)目啟動(dòng)之后,swag也是個(gè)容器,那邊對(duì)項(xiàng)目里的靜態(tài)文件不好處理。所以還是得在 compose 里帶上個(gè) NGINX 或者是 candy 之類的輕量級(jí) web 服務(wù)器(其實(shí)NGINX就很輕了)
小結(jié)
就這樣了,就是幾個(gè)細(xì)節(jié)的地方
說起來 pdm 使用比 poetry 順暢很多,在 docker 里使用也沒有遇到什么奇奇怪怪的問題,好評(píng)??
參考資料
到此這篇關(guān)于在python項(xiàng)目的docker鏡像里使用pdm管理依賴的文章就介紹到這了,更多相關(guān)python pdm管理依賴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)將列表中各個(gè)值快速賦值給多個(gè)變量
這篇文章主要介紹了python實(shí)現(xiàn)將列表中各個(gè)值快速賦值給多個(gè)變量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python中的正則表達(dá)式與JSON數(shù)據(jù)交換格式
正則表達(dá)式 是一個(gè)特殊的字符序列,一個(gè)字符串是否與我們所設(shè)定的這樣的字符序列,相匹配快速檢索文本、實(shí)現(xiàn)替換文本的操作。這篇文章主要介紹了Python中的正則表達(dá)式與JSON ,需要的朋友可以參考下2019-07-07
requests和lxml實(shí)現(xiàn)爬蟲的方法
下面小編就為大家?guī)硪黄猺equests和lxml實(shí)現(xiàn)爬蟲的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
python 拷貝特定后綴名文件,并保留原始目錄結(jié)構(gòu)的實(shí)例
下面小編就為大家分享一篇python 拷貝特定后綴名文件,并保留原始目錄結(jié)構(gòu)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python圖像濾波處理操作示例【基于ImageFilter類】
這篇文章主要介紹了Python圖像濾波處理操作,結(jié)合實(shí)例形式分析了Python基于ImageFilter類實(shí)現(xiàn)的濾波處理相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
pytorch中的nn.ZeroPad2d()零填充函數(shù)實(shí)例詳解
這篇文章主要介紹了pytorch中的nn.ZeroPad2d()零填充函數(shù)實(shí)例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
詳解python實(shí)現(xiàn)讀取郵件數(shù)據(jù)并下載附件的實(shí)例
這篇文章主要介紹了詳解python讀取郵件數(shù)據(jù)并下載附件的實(shí)例的相關(guān)資料,這里提供實(shí)現(xiàn)實(shí)例,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08

