快速体验
- 打开 InsCode(快马)平台 https://www.inscode.net
- 输入框内输入如下内容:
创建一个用于Python项目的Makefile,包含以下功能:1) 安装依赖 2) 运行单元测试 3) 代码格式化 4) 打包发布 5) 清理临时文件。项目结构包含src/和tests/目录,使用pytest进行测试。- 点击'项目生成'按钮,等待项目生成完整后预览效果
最近在整理一个Python小项目时,发现每次重复输入各种命令特别麻烦。比如要运行测试得敲pytest,格式化代码要输black .,打包发布又是一长串命令。作为一个懒人,我决定用Makefile来统一管理这些操作,没想到效果出奇的好。今天就把这个实战经验分享给大家,特别适合刚接触Makefile的朋友。
- 为什么选择Makefile
Makefile最初是用于C/C++项目的编译工具,但其实它在任何需要自动化流程的场景都很好用。相比起写一堆shell脚本,Makefile有几个明显优势:
- 命令可以分模块组织,比如
make test就只跑测试 - 会自动检查文件变更,避免重复执行
- 语法简洁,依赖关系一目了然
几乎所有开发环境都内置支持
基础项目结构准备
我的Python项目结构很简单:
project/ ├── src/ # 源代码目录 ├── tests/ # 测试代码目录 ├── requirements.txt # 依赖文件 └── Makefile # 今天的主角- 编写第一个Makefile目标
从最简单的开始,先实现依赖安装功能。在Makefile里写入:
install: pip install -r requirements.txt这样以后只需要运行make install就能一键安装所有依赖。注意命令前必须是Tab缩进,这是Makefile的语法要求。
- 添加测试自动化
项目用pytest做测试,增加test目标:
test: pytest tests/ -v这里的-v参数让输出更详细。我还喜欢加个覆盖率检查:
test-coverage: pytest --cov=src tests/- 代码格式化整合
团队协作时保持代码风格一致很重要,我用black做格式化:
format: black src/ tests/可以再加个检查格式的目标,在CI中使用:
check-format: black --check src/ tests/- 打包发布自动化
Python项目通常打包成wheel文件,添加:
build: python -m build发布到PyPI可以这样:
publish: build twine upload dist/*注意这里的publish依赖于build目标,Makefile会自动先执行build。
- 清理临时文件
开发过程中会产生很多临时文件,添加clean目标:
clean: rm -rf dist/ rm -rf *.egg-info/ find . -name "__pycache__" -exec rm -rf {} + find . -name "*.pyc" -exec rm -f {} +- 完整Makefile示例
把上面所有功能组合起来:
.PHONY: install test test-coverage format check-format build publish clean install: pip install -r requirements.txt test: pytest tests/ -v test-coverage: pytest --cov=src tests/ format: black src/ tests/ check-format: black --check src/ tests/ build: python -m build publish: build twine upload dist/* clean: rm -rf dist/ rm -rf *.egg-info/ find . -name "__pycache__" -exec rm -rf {} + find . -name "*.pyc" -exec rm -f {} +- 实际使用体验
有了这个Makefile后,日常开发流程变得特别顺畅: - 新拉取代码后make install安装依赖 - 写代码时经常make test跑测试 - 提交前make format统一代码风格 - 发布时make publish一键打包上传 -make clean随时保持项目干净
进阶技巧
使用变量避免重复路径:
makefile SRC_DIR = src TEST_DIR = tests- 添加help目标显示所有命令:
makefile help: @echo "install 安装依赖" @echo "test 运行测试" @echo "format 格式化代码" 支持环境变量,比如指定Python路径:
makefile PYTHON = python3常见问题解决
如果遇到"Missing separator"错误,检查命令前是否用了Tab而不是空格
- 命令前加
@可以禁止回显,让输出更干净 - 使用
.PHONY声明伪目标,避免和同名文件冲突 Windows系统可能需要安装make工具,或者使用WSL
项目协作建议
把Makefile提交到代码仓库,这样所有开发者都能使用相同的命令。可以在README中注明基本用法,比如:
## 开发命令 - 安装依赖: `make install` - 运行测试: `make test` - 格式化代码: `make format`这个Makefile方案我已经在几个Python项目中实际使用,效果非常好。特别是团队新成员上手时,不用再记各种复杂的命令,直接make help就能看到所有可用操作。
最近发现InsCode(快马)平台对Python项目支持很友好,可以直接在浏览器里编写和运行代码,还能一键部署成可访问的Web服务。他们的在线编辑器响应速度很快,不需要配置本地环境就能开始coding,特别适合快速验证想法。
对于需要展示的Python项目,平台的一键部署功能简直是神器。不用操心服务器配置,点个按钮就能把项目变成在线可访问的状态,分享给其他人特别方便。我试过把一个小工具部署上去,整个过程不到1分钟,比传统方式省心太多了。
快速体验
- 打开 InsCode(快马)平台 https://www.inscode.net
- 输入框内输入如下内容:
创建一个用于Python项目的Makefile,包含以下功能:1) 安装依赖 2) 运行单元测试 3) 代码格式化 4) 打包发布 5) 清理临时文件。项目结构包含src/和tests/目录,使用pytest进行测试。- 点击'项目生成'按钮,等待项目生成完整后预览效果