SymPy构建系统:构建工具与打包发布

SymPy构建系统:构建工具与打包发布

【免费下载链接】sympy 一个用纯Python语言编写的计算机代数系统。 【免费下载链接】sympy 项目地址: https://gitcode.com/GitHub_Trending/sy/sympy

概述

SymPy作为纯Python编写的计算机代数系统(Computer Algebra System,CAS),其构建系统采用了Python生态中成熟的工具链。本文将深入解析SymPy的构建架构、打包机制和发布流程,为开发者提供完整的构建发布指南。

构建系统架构

核心配置文件

SymPy的构建系统基于以下核心配置文件:

文件作用技术栈
setup.py主构建脚本Setuptools
pyproject.toml现代构建配置PEP 518标准
MANIFEST.in包内容清单distutils
release/发布脚本集Docker + rever

模块组织结构

SymPy采用模块化架构,构建系统需要处理超过100个子模块:

mermaid

构建工具详解

Setuptools配置

setup.py是SymPy的主要构建入口,包含完整的包元数据和构建指令:

# 版本要求检查
if sys.version_info < (3, 9):
    print("SymPy requires Python 3.9 or newer")
    sys.exit(-1)

# 包模块自动发现
modules = [
    'sympy.algebras',
    'sympy.assumptions',
    'sympy.calculus',
    # ... 超过100个模块
]

# 依赖管理
install_requires=[
    'mpmath >= 1.1.0',  # 多精度数学库
],

# 包数据包含
package_data={
    'sympy.utilities.mathml.data': ['*.xsl'],
    'sympy.parsing.autolev': ['*.g4', '*.al'],
    'sympy': ['py.typed']  # 类型提示支持
}

现代构建配置

pyproject.toml采用现代Python打包标准:

# 测试配置
[tool.pytest.ini_options]
addopts = "-m 'not slow and not tooslow'"
testpaths = ["sympy", "doc/src"]

# 代码质量工具
[tool.ruff]
lint.select = ["E", "F", "C4", "FURB"]
line-length = 88

# 类型检查配置
[tool.mypy]
exclude = ["sympy/parsing/autolev/test-examples"]

包内容管理

MANIFEST.in精确控制发布包的内容:

recursive-include data *          # 包含数据文件
recursive-include doc *           # 包含文档
prune doc/_build                  # 排除构建目录
include LICENSE                   # 包含许可证
exclude MANIFEST.in               # 排除自身

自定义构建命令

SymPy扩展了Setuptools,提供了多个自定义命令:

测试命令

class test_sympy(Command):
    """运行所有SymPy测试"""
    def run(self):
        from sympy.testing import runtests
        runtests.run_all_tests()

ANTLR解析器生成

class antlr(Command):
    """从ANTLR语法生成解析器代码"""
    def run(self):
        from sympy.parsing.latex._build_latex_antlr import build_parser
        build_parser()

源码分发定制

class sdist_sympy(sdist):
    def run(self):
        # 包含Git提交哈希
        commit_hash = subprocess.check_output(['git', 'rev-parse', 'HEAD'])
        Path('doc/commit_hash.txt').write_text(commit_hash)
        super().run()

发布流程

版本管理策略

SymPy采用语义化版本控制,版本号存储在sympy/release.py

__version__ = "1.15.0.dev"  # 开发版本

发布候选版本使用PEP 440标准格式:1.15.0rc1

发布检查清单

发布前必须完成以下步骤:

  1. 创建发布分支:基于版本号命名(如1.15.0
  2. 更新版本号:发布分支使用正式版本,主分支使用开发版本
  3. 生成发布说明:在项目wiki创建发布说明页面
  4. 推送分支:确保分支已推送到远程仓库

Docker化发布环境

SymPy使用Docker确保发布环境的一致性:

# 构建发布镜像
docker build -f Dockerfile . -t sympy/sympy-release

# 运行发布脚本
./release.sh <BRANCH> <VERSION>

发布自动化流程

mermaid

多平台打包支持

源码分发包

SymPy生成以下格式的发布包:

包格式生成命令用途
.tar.gzpython setup.py sdist源码分发
.zippython setup.py sdist --formats=zipWindows兼容
.whlpip wheel .二进制分发

依赖管理

SymPy的依赖关系非常简单:

install_requires=[
    'mpmath >= 1.1.0',  # 唯一必需依赖
],
extras_require={
    "dev": ["pytest>=7.1.0", "hypothesis>=6.70.0"],
}

质量保证体系

测试架构

SymPy拥有完善的测试体系:

mermaid

代码质量工具

集成多种静态分析工具:

工具用途配置位置
pytest测试运行pyproject.toml
ruff代码检查pyproject.toml
mypy类型检查pyproject.toml
coverage测试覆盖.coveragerc

最佳实践指南

开发环境设置

# 1. 克隆仓库
git clone https://gitcode.com/GitHub_Trending/sy/sympy

# 2. 安装开发依赖
pip install -e .[dev]

# 3. 运行测试
python setup.py test

# 4. 代码质量检查
ruff check sympy/

发布准备检查

发布前必须验证的项目:

  1. 版本一致性:确保所有地方的版本号一致
  2. 测试通过:所有测试必须通过,包括慢速测试
  3. 文档更新:确保文档反映最新变化
  4. 依赖检查:验证所有依赖版本兼容性

故障排除

常见问题及解决方案:

问题原因解决方案
ANTLR生成失败缺少ANTLR工具安装antlr4-tools
测试超时慢速测试过多使用-m "not slow"
内存不足大型测试用例增加测试内存限制

未来发展方向

SymPy构建系统正在向现代化演进:

  1. 迁移到pyproject.toml:逐步减少对setup.py的依赖
  2. 增强类型提示:完善整个代码库的类型注解
  3. CI/CD集成:加强自动化测试和发布流程
  4. 多架构支持:增加对ARM等架构的官方支持

总结

【免费下载链接】sympy 一个用纯Python语言编写的计算机代数系统。 【免费下载链接】sympy 项目地址: https://gitcode.com/GitHub_Trending/sy/sympy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值