requirements.txt要被抛弃了?
共 6119字,需浏览 13分钟
·
2024-06-24 17:00
本文经授权转载微信公众号:麦叔编程
最近又到某Python项目摸了一把鱼,项目架构需求啥的没记住,就记住了他们部署依赖的时候不用pip3 install -r requirements.txt
而是用一个pdm
命令进行依赖部署。
原来咱也没用过这个命令,所以就又被“学习”了一把。
1什么是PDM?
PDM (Python Development Master)
是一个现代的Python包管理器和构建工具,类似于传统的 pip
和 setuptools
,但有其独特的功能和优点。
PDM 直接支持 PEP 582
(Python Local Packages Directory)
,这意味着它可以将依赖项安装在项目目录下的 pypackages 文件夹中,而不是全局或虚拟环境中。这种方式可以避免包版本冲突,并简化依赖管理。
2PDM的安装和基本使用
我假装创建一个爬虫项目,爬虫项目里requests
模块肯定不能少!!
安装PDM
pip install pdm
创建目录
mkdir spider # 创建项目目录
cd spider # 进入项目目录
初始化项目PDM环境
这个步骤和初始化git仓库非常类似:
pdm init
如果你的本地有个Python环境,它会让你选择一个作为base
:
0. cpython@3.11 (E:\anaconda3\python.EXE)
1. cpython@3.11 (D:\Python311\python.exe)
Please select (0):
选择完解释器环境的base
之后,还需要填一些“项目”相关的信息(不想填的就一路回车下去):
Virtualenv is created successfully at D:\spider\.venv
Project name (spider):
Project version (0.1.0): 0.0.1
Do you want to build this project for distribution(such as wheel)?
If yes, it will be installed by default when running `pdm install`. [y/n] (n):
License(SPDX name) (MIT):
Author name (Kevin):
Author email (xxxx@qq.com):
Python requires('*' to allow any) (==3.11.*):
Project is initialized successfully
安装模块
我们这个项目只拿requests模块作为演示。
在上面创建PDM环境下,执行命令对requests
模块进行安装:
pdm add requests
安装命令执行:
Adding packages to default dependencies: requests
Lock successful
Changes are written to pyproject.toml.
Synchronizing working set with resolved packages: 5 to add, 0 to update, 0 to remove
v Install certifi 2024.6.2 successful
v Install requests 2.32.3 successful
v Install charset-normalizer 3.3.2 successful
v Install idna 3.7 successful
v Install urllib3 2.2.1 successful
All complete!
查看包
pdm list
删除包
pdm remove <package>
更新包
pdm update <package> # 更新某个包
pdm update # 更新所有包
从上面的命令中,我们能很清楚地知道安装requests
模块所需要的其他依赖。
执行代码
在项目目录下创建一个clawer.py
文件,写入以下内容:
import requests
response = requests.get('https://httpbin.org/get')
print(response.json())
然后用以下命令运行:
pdm run python clawer.py
得到请求的响应内容:
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.32.3', 'X-Amzn-Trace-Id': 'Root=1-667037fc-61e6856f6c44472524e6ff39'}, 'origin': '62.244.90.31', 'url': 'https://httpbin.org/get'}
部署到其他环境
一般情况,我们需要把本地的依赖导出一份requirements.txt
,然后在其他环境使用pip install -r requirements.txt
对依赖进行安装。
在PDM环境中,是由pyproject.toml
管理依赖。
我又创建了一个项目new_spider
,并放入代码文件clawer.py
:
D:\new_spider>ls
clawer.py pyproject.toml
通过已有pyproject.toml
构建新的运行环境:
D:\new_spider>pdm init
pyproject.toml already exists, update it now.
Please enter the Python interpreter to use
0. cpython@3.11 (E:\anaconda3\python.EXE)
1. cpython@3.11 (D:\Python311\python.exe)
Please select (0):
Project name (new_spider):
Project version (0.1.0):
Do you want to build this project for distribution(such as wheel)?
If yes, it will be installed by default when running `pdm install`. [y/n] (n):
License(SPDX name) (MIT):
Author name (Kevin):
Author email (xxxx@qq.commkdir):
Python requires('*' to allow any) (==3.11.*):
Project is initialized successfully
D:\new_spider>pdm install
WARNING: Lockfile does not exist
Updating the lock file...
Lock successful
Changes are written to pdm.lock.
Synchronizing working set with resolved packages: 0 to add, 4 to update, 0 to remove
v Update certifi 2024.2.2 -> 2024.6.2 successful
v Update requests 2.31.0 -> 2.32.3 successful
v Update charset-normalizer 2.0.4 -> 3.3.2 successful
v Update urllib3 1.26.18 -> 2.2.2 successful
All complete!
D:\new_spider>pdm run python clawer.py
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.32.3', 'X-Amzn-Trace-Id': 'Root=1-66703d39-428dfc987a65bf524bb0149e'}, 'origin': '62.254.90.31', 'url': 'https://httpbin.org/get'}
部署运行成功!
3最后
PDM
是旨在现代化和简化Python项目依赖管理和构建的工具和标准。PDM
通过支持PEP-582
和使用pyproject.toml
,提供了一种简洁、高效的依赖管理方式,特别适合需要减少环境冲突和简化项目配置的开发者。
而pyproject.toml
作为一个统一的配置文件,正在成为Python生态系统的标准,使得项目配置和依赖声明更加一致和便捷。
缺点:有学习成本,操作略微繁琐!人生苦短,我用docker!
点击关注公众号,阅读更多精彩内容