系列文章

  1. 网页爬虫第一课:从案例解构爬虫基本概念
  2. 填坑18年:我总结的CSS选择器
  3. 爬虫数据持久化方式的选择
  4. 爬取静态博客网页以分析本网站拓扑结构
  5. python程序的性能测试及瓶颈分析
  6. Python工程项目的规范开发指南

学习动机

以史为鉴, 可以少走弯路, 这对于一个新手来说是难得的经验. 在文章 Python开发避免踩坑指南 中, 作者提到:

写这篇文章的主要目的是帮助刚刚入门Python的同学和从其他语言转过来的同学,快速熟悉Python一般的生态圈,比如IDE使用、虚拟环境、项目结构管理、Debug、版本管理等等. 本文主要包含以下几个方面:

  1. 配置开发环境
  2. 虚拟环境管理和pip
  3. 项目目录结构
  4. 代码风格
  5. 版本管理

这些经验对于python程序开发的规范性是非常经典的指南. 而随着新技术、新工具的发展, 这些python程序开发规范有了新的演绎. 为了简明起见, 我将上述开发规范精简为以下几个方面、并按照循序渐进的顺序排列:

  1. 配置开发环境
  2. 程序版本管理
  3. 项目目录结构
  4. 代码风格

配置开发环境

在文章 [1] 中, 作者使用virtualenv作为开发环境隔离的工具. 在我看来, python的虚拟环境隔离主要能提供这几方面的便利:

  1. 隔离各个项目之间的类库之间的干扰
  2. 锁定某个项目内部的类库的版本
  3. 便于python软件的发布与安装

在2023年, 围绕上述三个目的出现了新的python开发管理工具, PDM. 作者关于该软件的介绍简介如下:

一个现代的 Python 包管理器,支持 PEP 最新标准。主要特性包括:

  1. 一个简单且相对快速的依赖解析器,特别是对于大的二进制包发布。
  2. 兼容 PEP 517 的构建后端,用于构建发布包(源码格式与 wheel 格式)
  3. 灵活且强大的插件系统
  4. PEP 621 元数据格式
  5. 功能强大的用户脚本
  6. 像 pnpm 一样的中心化安装缓存,节省磁盘空间

PDM与其它的python包管理工具之间的差别可以参考此文 [2] . 本着买新不买旧的原则, 我们将使用pdm作为python开发环境隔离的工具. 初级使用方法如下:

  1. 安装pdm(Linux安装命令)
1
curl -sSL https://pdm.fming.dev/dev/install-pdm.py | python3 -
  1. 为Python开发初始化一个新的PDM项目
1
pdm init
  1. 添加依赖
1
2
# 这些依赖库仅作演示之用, 每个人的需求不同, 请自行添加
pdm add requests mitmproxy goose3 jieba

你可以在同一条命令中添加多个依赖。稍等片刻完成之后,你可以查看pdm.lock文件看看有哪些依赖以及对应版本。

至此, 你的python开发环境已经配置完成. 你可以使用pdm run python来运行你的python程序, 也可以使用pdm run pip来安装你的python程序所需要的依赖.

Awesome PDM 这个项目收集了一些非常有用的 PDM 插件及相关资源。

值得一提的是, 为了让pdm命令在shell中自动补全, 我们可以为bashzsh配置自动补全. 以zsh(oh-my-zsh)为例:

1
2
mkdir $ZSH_CUSTOM/plugins/pdm
pdm completion zsh > $ZSH_CUSTOM/plugins/pdm/_pdm

接着在~/.zshrc中添加pdm插件:

1
plugins=(... pdm)

pdm的子命令一览及在zsh中的自动补全如下图所示:
python开发方式的规范化standardization-pdm的子命令一览及在zsh中的自动补全.png

程序版本管理

项目目录结构

代码风格

参考与注释