当前位置: 首页 > news >正文

Python 第三方自定义库开发与使用教程

今天想试一试自建库的玩法,尝试了一下教程,完善一下代码,完全可用,留下记录当作备用。
自己测试的详细的仓库地址:

1. 创建可发布的库项目结构

首先创建完整的项目结构:

mymathlib/
├── src/
│   └── mymathlib/
│       ├── __init__.py
│       ├── core.py
│       ├── advanced.py
│       └── constants.py
├── tests/
│   ├── __init__.py
│   ├── test_core.py
│   ├── test_advanced.py
│   └── test_constants.py
├── examples/
│   ├── basic_usage.py
│   └── advanced_usage.py
├── docs/
│   └── getting_started.md
├── setup.py
├── pyproject.toml
├── README.md
├── LICENSE
└── requirements.txt

2. 核心代码实现

2.1 src/mymathlib/__init__.py

"""
MyMathLib - 一个强大的数学运算库
版本: 1.0.0提供基本的数学运算、高级数学函数和常用数学常量。
"""from .core import MathOperations, Calculator
from .advanced import AdvancedMath, Statistics
from .constants import MathConstants, PI, E, GOLDEN_RATIO__version__ = "1.0.0"
__author__ = "Your Name"
__email__ = "your.email@example.com"__all__ = ['MathOperations','Calculator','AdvancedMath','Statistics','MathConstants','PI','E','GOLDEN_RATIO'
]

2.2 src/mymathlib/core.py

"""
核心数学运算模块
"""class MathOperations:"""基础数学运算类"""def __init__(self, precision=2):self.precision = precisiondef add(self, *numbers):"""加法运算,支持多个参数"""result = sum(numbers)return round(result, self.precision)def subtract(self, a, b):"""减法运算"""result = a - breturn round(result, self.precision)def multiply(self, *numbers):"""乘法运算,支持多个参数"""result = 1for num in numbers:result *= numreturn round(result, self.precision)def divide(self, a, b):"""除法运算"""if b == 0:raise ValueError("除数不能为0")result = a / breturn round(result, self.precision)class Calculator:"""计算器类,提供链式操作"""def __init__(self, initial_value=0, precision=2):self.result = initial_valueself.precision = precisionself.history = []def add(self, value):"""加法操作"""self.result += valueself.history.append(f"+ {value}")return selfdef subtract(self, value):"""减法操作"""self.result -= valueself.history.append(f"- {value}")return selfdef multiply(self, value):"""乘法操作"""self.result *= valueself.history.append(f"* {value}")return selfdef divide(self, value):"""除法操作"""if value == 0:raise ValueError("除数不能为0")self.result /= valueself.history.append(f"/ {value}")return selfdef get_result(self):"""获取当前结果"""return round(self.result, self.precision)def clear(self):"""清除计算历史"""self.result = 0self.history = []return selfdef get_history(self):"""获取计算历史"""return self.history

2.3 src/mymathlib/advanced.py

"""
高级数学函数模块
"""import mathclass AdvancedMath:"""高级数学运算类"""@staticmethoddef factorial(n):"""计算阶乘"""if n < 0:raise ValueError("阶乘只能计算非负整数")if n == 0:return 1result = 1for i in range(1, n + 1):result *= ireturn result@staticmethoddef is_prime(n):"""判断质数"""if n <= 1:return Falseif n <= 3:return Trueif n % 2 == 0 or n % 3 == 0:return Falsei = 5while i * i <= n:if n % i == 0 or n % (i + 2) == 0:return Falsei += 6return True@staticmethoddef fibonacci(n):"""生成斐波那契数列"""if n <= 0:return []elif n == 1:return [0]elif n == 2:return [0, 1]fib_sequence = [0, 1]for i in range(2, n):fib_sequence.append(fib_sequence[-1] + fib_sequence[-2])return fib_sequence@staticmethoddef power(base, exponent):"""幂运算"""return base ** exponent@staticmethoddef sqrt(n):"""平方根"""if n < 0:raise ValueError("不能计算负数的平方根")return math.sqrt(n)class Statistics:"""统计运算类"""@staticmethoddef mean(numbers):"""计算平均值"""if not numbers:raise ValueError("数字列表不能为空")return sum(numbers) / len(numbers)@staticmethoddef median(numbers):"""计算中位数"""if not numbers:raise ValueError("数字列表不能为空")sorted_numbers = sorted(numbers)n = len(sorted_numbers)mid = n // 2if n % 2 == 0:return (sorted_numbers[mid - 1] + sorted_numbers[mid]) / 2else:return sorted_numbers[mid]@staticmethoddef mode(numbers):"""计算众数"""from collections import Counterif not numbers:raise ValueError("数字列表不能为空")counter = Counter(numbers)max_count = max(counter.values())return [num for num, count in counter.items() if count == max_count]

2.4 src/mymathlib/constants.py

"""
数学常量模块
"""class MathConstants:"""数学常量类"""PI = 3.141592653589793E = 2.718281828459045GOLDEN_RATIO = 1.618033988749895EULER_MASCHERONI = 0.5772156649015329LIGHT_SPEED = 299792458  # m/s# 导出常用常量
PI = MathConstants.PI
E = MathConstants.E
GOLDEN_RATIO = MathConstants.GOLDEN_RATIO

3. 配置打包文件

3.1 setup.py

from setuptools import setup, find_packageswith open("README.md", "r", encoding="utf-8") as fh:long_description = fh.read()with open("requirements.txt", "r", encoding="utf-8") as fh:requirements = fh.read().splitlines()setup(name="mymathlib",version="1.0.0",author="Your Name",author_email="your.email@example.com",description="A comprehensive mathematical operations library",long_description=long_description,long_description_content_type="text/markdown",url="https://github.com/yourusername/mymathlib",package_dir={"": "src"},packages=find_packages(where="src"),classifiers=["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","Intended Audience :: Education","Intended Audience :: Science/Research","License :: OSI Approved :: MIT License","Programming Language :: Python :: 3","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Programming Language :: Python :: 3.10","Operating System :: OS Independent","Topic :: Scientific/Engineering :: Mathematics","Topic :: Software Development :: Libraries :: Python Modules",],python_requires=">=3.7",install_requires=requirements,extras_require={"dev": ["pytest>=6.0","pytest-cov","black","flake8",],},keywords="math, mathematics, calculator, statistics",project_urls={"Bug Reports": "https://github.com/yourusername/mymathlib/issues","Source": "https://github.com/yourusername/mymathlib","Documentation": "https://github.com/yourusername/mymathlib/wiki",},
)

3.2 pyproject.toml

[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"[project]
name = "mymathlib"
version = "1.0.0"
description = "A comprehensive mathematical operations library"
readme = "README.md"
requires-python = ">=3.7"
license = {file = "LICENSE"}
authors = [{name = "Your Name", email = "your.email@example.com"}
]
keywords = ["math", "mathematics", "calculator", "statistics"]
classifiers = ["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: OSI Approved :: MIT License","Programming Language :: Python :: 3","Operating System :: OS Independent",
][project.urls]
Homepage = "https://github.com/yourusername/mymathlib"
Documentation = "https://github.com/yourusername/mymathlib/wiki"
Repository = "https://github.com/yourusername/mymathlib"
Issues = "https://github.com/yourusername/mymathlib/issues"

4. 安装和使用教程

4.1 本地安装开发版本

# 在项目根目录
pip install -e .# 或者使用setup.py
python setup.py develop

4.2 打包和发布

# 安装打包工具
pip install setuptools wheel twine# 构建包
python setup.py sdist bdist_wheel# 检查包
twine check dist/*# 上传到PyPI(需要先注册账号)
twine upload dist/*

4.3 第三方使用

# 从PyPI安装
pip install mymathlib# 或者指定版本
pip install mymathlib==1.0.0

5. 使用示例

5.1 基本使用

from mymathlib import MathOperations, Calculator, AdvancedMath, Statistics, PI# 基础运算
ops = MathOperations(precision=4)
print(f"加法: {ops.add(1.2345, 2.3456)}")
print(f"乘法: {ops.multiply(3, 4, 5)}")# 链式计算器
calc = Calculator(10)
result = calc.add(5).multiply(2).subtract(3).divide(4).get_result()
print(f"计算结果: {result}")
print(f"计算历史: {calc.get_history()}")# 高级函数
print(f"5的阶乘: {AdvancedMath.factorial(5)}")
print(f"17是质数: {AdvancedMath.is_prime(17)}")
print(f"斐波那契数列: {AdvancedMath.fibonacci(10)}")# 统计计算
numbers = [1, 2, 3, 4, 5, 5, 6]
print(f"平均值: {Statistics.mean(numbers)}")
print(f"中位数: {Statistics.median(numbers)}")
print(f"众数: {Statistics.mode(numbers)}")# 数学常量
print(f"圆周率: {PI}")

5.2 高级使用

from mymathlib import MathConstants, AdvancedMath# 使用常量类
constants = MathConstants()
print(f"光速: {constants.LIGHT_SPEED} m/s")
print(f"黄金比例: {constants.GOLDEN_RATIO}")# 错误处理
try:result = AdvancedMath.sqrt(-1)
except ValueError as e:print(f"错误: {e}")# 批量处理
numbers_to_check = [2, 3, 4, 5, 6, 7, 8, 9, 10]
primes = [num for num in numbers_to_check if AdvancedMath.is_prime(num)]
print(f"质数: {primes}")

6. 完整的测试用例

6.1 tests/test_core.py

import unittest
from mymathlib.core import MathOperations, Calculatorclass TestCoreFunctions(unittest.TestCase):def setUp(self):self.ops = MathOperations(precision=4)self.calc = Calculator()def test_addition(self):self.assertEqual(self.ops.add(1, 2), 3)self.assertEqual(self.ops.add(1.5, 2.5), 4.0)self.assertEqual(self.ops.add(1, 2, 3, 4), 10)def test_division_by_zero(self):with self.assertRaises(ValueError):self.ops.divide(10, 0)def test_calculator_chain(self):result = self.calc.add(5).multiply(3).subtract(2).divide(4).get_result()self.assertEqual(result, 3.25)def test_calculator_history(self):self.calc.add(10).multiply(2)self.assertEqual(len(self.calc.get_history()), 2)self.calc.clear()self.assertEqual(len(self.calc.get_history()), 0)if __name__ == '__main__':unittest.main()

6.2 运行测试

# 运行所有测试
python -m pytest tests/ -v# 运行特定测试文件
python -m pytest tests/test_core.py -v# 生成测试覆盖率报告
python -m pytest tests/ --cov=src/mymathlib

7. 文档和示例

7.1 README.md

# MyMathLib一个功能强大的数学运算库,提供基础运算、高级函数和统计计算。## 安装```bash
pip install mymathlib

快速开始

from mymathlib import MathOperations, AdvancedMath# 基础运算
ops = MathOperations()
result = ops.add(1, 2, 3, 4)# 高级函数
factorial = AdvancedMath.factorial(5)

功能特性

  • 基础四则运算
  • 链式计算器
  • 高级数学函数
  • 统计计算
  • 数学常量

## 8. 版本管理和发布### 8.1 版本控制
```bash
# 更新版本号
# 在 setup.py 和 __init__.py 中更新版本号# 创建新版本标签
git tag v1.0.0
git push origin v1.0.0

8.2 发布到PyPI

# 清理旧构建
rm -rf dist/ build/ *.egg-info/# 构建新版本
python setup.py sdist bdist_wheel# 上传到PyPI
twine upload dist/*# 或者上传到测试PyPI
twine upload --repository testpypi dist/*

文章转载自:

http://HTiuFJTN.bfcxf.cn
http://byUDi5eR.bfcxf.cn
http://9eHSoofy.bfcxf.cn
http://xzTf6ZhL.bfcxf.cn
http://onhZo74w.bfcxf.cn
http://JEYZAo8j.bfcxf.cn
http://Wt2mr4Nz.bfcxf.cn
http://P0dIujL9.bfcxf.cn
http://3j0REZHO.bfcxf.cn
http://vmHIYd5x.bfcxf.cn
http://tvgle3wz.bfcxf.cn
http://kz71apCa.bfcxf.cn
http://NJtrBxI1.bfcxf.cn
http://W0Imhd6E.bfcxf.cn
http://c5848yFw.bfcxf.cn
http://S1ylQJyt.bfcxf.cn
http://4GqQuz2i.bfcxf.cn
http://1CJTxvCT.bfcxf.cn
http://ZyNJM8Kc.bfcxf.cn
http://zJCxhWaI.bfcxf.cn
http://Y7Cnkqn3.bfcxf.cn
http://6TfqIJbC.bfcxf.cn
http://hRgPUpyI.bfcxf.cn
http://QZjyDBaP.bfcxf.cn
http://V19nk1ZR.bfcxf.cn
http://1JiZFgYg.bfcxf.cn
http://EqgL3jVZ.bfcxf.cn
http://AumbQpIy.bfcxf.cn
http://yc5hDxlS.bfcxf.cn
http://QwUpqFcY.bfcxf.cn
http://www.dtcms.com/a/367255.html

相关文章:

  • Browser Use 浏览器自动化 Agent:让浏览器自动为你工作
  • AI代码管家:告别烂代码的自动化魔法
  • 数据结构_二叉平衡树
  • 君正交叉编译链工具mips-gcc540-glibc222-64bit-r3.3.0.smaller.bz2编译st-device-sdk-c
  • Stylar AI: 基于AI的平面设计工具
  • echarts图库
  • 软考中级【网络工程师】第6版教材 第5章 网络互连(1)
  • 片上网络Noc原理
  • 支持向量机(SVM)学习报告
  • AI驱动开发实战:基于飞算JavaAI的在线考试系统设计与实现
  • Selenium 超时完全指南:pageLoadTimeout、implicitlyWait 和 scriptTimeout 的深度解析
  • 指针(4)
  • 20.36 QLoRA微调实测:59%显存暴降+3倍提速,95%性能保留惊呆业界!
  • 【数学建模学习笔记】机器学习分类:XGBoost分类
  • Mybatis入门、操作数据、配置xml映射、数据封装
  • STM32实践项目(激光炮台)
  • NotePad++下载安装与设置
  • 深入解析 UDT 协议:突破数据传输瓶颈的高性能解决方案
  • MySQL分区表实战:提升大表查询性能的有效方法
  • c# .net中using的使用
  • AI大模型企业落地指南-笔记05
  • InheritedWidget
  • 2025数学建模国赛高教社杯C题思路代码文章助攻
  • 超细整理,全链路性能测试-容量评估与规划,看这篇就够了...
  • Java ConcurrentModificationException 深度剖析开发调试日志
  • 从群体偏好到解构对齐:大模型强化学习从GRPO到DAPO的“认知”进化
  • https + 域名 + 客户端证书访问模式
  • Python中将方法转为属性式访问
  • Flutter之riverpod状态管理详解
  • 【计算机网络(自顶向下方法 第7版)】第一章 计算机网络概述