上位机知识篇---setuptools


文章目录

  • 前言
  • 简介
  • 一、核心功能
    • 1.依赖管理
      • 自动安装依赖
      • 版本约束
      • 额外依赖组
      • 命令行工具
      • 插件系统
    • 2.开发模式安装
    • 3.资源文件管理
    • 4.Egg 分发(已逐渐被 Wheel 取代)
    • 5.命名空间包
  • 二、基础用法
    • 1. 项目结构示例
    • 2. 配置文件 setup.cfg
    • 3. setup.py 最小化示例(现代项目可省略)
    • 4. 常用命令
  • 三、进阶用法与最佳实践
    • 1. 动态版本号
    • 2. 包含数据文件
    • 3. Cython 扩展
    • 4. 兼容性标记
    • 5. 自定义构建命令
  • 四、常见问题解决
    • 1.找不到包?
    • 2.资源文件未包含?
    • 3.Entry Point 不生效?
  • 五、生态工具链整合
    • 1.构建
    • 2.上传
    • 3.虚拟环境
    • 4.测试
    • 5.文档
  • 总结


前言

本文仅仅简单介绍了Python中setuptools的模块的功能以及使用方法。


简介

setuptools 是 Python 生态中用于打包和分发项目的核心工具,它扩展了 Python 原生的 distutils 模块,提供了更强大的功能和更便捷的配置方式。以下从功能、用法和最佳实践三个维度进行详细说明:

一、核心功能

1.依赖管理

自动安装依赖

自动安装依赖:通过 install_requires 声明依赖,pip install 时会自动安装。

版本约束

版本约束:支持语义化版本(如 >=2.0,❤️.0)

额外依赖组

额外依赖组:通过 extras_require 定义可选依赖(如测试、文档依赖)。

命令行工具

命令行工具:将 Python 函数映射为命令行命令(如 pip 自身即通过 entry point 实现)。

插件系统

插件系统:其他程序可通过 entry points 动态发现并加载你的包(如 pytest 插件)。

2.开发模式安装

pip install -e .:将包以“可编辑模式”安装,代码修改无需重新安装,直接生效。

3.资源文件管理

自动包含 package_data 中声明的非代码文件(如配置文件、模板)。

4.Egg 分发(已逐渐被 Wheel 取代)

提供 .egg 格式分发,支持二进制依赖(现推荐使用 wheel 格式)。

5.命名空间包

支持在多个项目中共享同一个包命名空间(如 google.cloud.storage 和 google.cloud.bigquery)。

二、基础用法

1. 项目结构示例

my_project/
├── src/  # 推荐使用 src 目录隔离源码
│   └── my_pkg/
│       ├── __init__.py
│       └── module.py
├── tests/
├── pyproject.toml  # 构建系统声明
├── setup.cfg       # 推荐:静态配置
└── setup.py        # 动态配置(可选,逐渐被 setup.cfg 替代)

2. 配置文件 setup.cfg

[metadata]
name = my_pkg
version = 1.0.0
author = Your Name
description = A sample package[options]
package_dir = = src
packages = find:  # 自动查找包
install_requires =requests>=2.24.0numpy~=1.20.0[options.extras_require]
test =pytest>=6.0
dev = %(test)sflake8>=3.8[options.entry_points]
console_scripts =mycli = my_pkg.cli:main
pytest11 =myplugin = my_pkg.pytest_plugin

3. setup.py 最小化示例(现代项目可省略)

from setuptools import setupsetup()

4. 常用命令

#安装开发模式
pip install -e .#构建源码包和 Wheel
python -m build#上传到 PyPI
twine upload dist/*

三、进阶用法与最佳实践

1. 动态版本号

在 setup.cfg 中引用 __version__:#my_pkg/__init__.py
__version__ = "1.2.3"#setup.cfg
[metadata]
version = attr: my_pkg.__version__

2. 包含数据文件

[options]
include_package_data = True[options.package_data]
my_pkg =data/*.jsonconfigs/*.yml

3. Cython 扩展

from setuptools import setup, Extension
from Cython.Build import cythonizeextensions = [Extension("my_pkg.optimized", ["src/my_pkg/optimized.pyx"])
]setup(ext_modules=cythonize(extensions))

4. 兼容性标记

[metadata]
classifiers =Programming Language :: Python :: 3Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9

5. 自定义构建命令

继承 setuptools.Command 实现自定义命令:

from setuptools import setup, Commandclass CustomCommand(Command):def run(self):print("Running custom task...")setup(cmdclass={'custom': CustomCommand})

四、常见问题解决

1.找不到包?

使用 package_dir 和 packages=find: 自动检测。
确保 init.py 存在于每个包目录。

2.资源文件未包含?

检查 MANIFEST.in 或 include_package_data=True。

3.Entry Point 不生效?

确认函数签名正确(如 def main():)。
重新安装包(pip install -e .)。

五、生态工具链整合

1.构建

构建:使用 build 替代 python setup.py sdist bdist_wheel

2.上传

上传:使用 twine 替代 setup.py upload

3.虚拟环境

虚拟环境:结合 virtualenv/venv

4.测试

测试:通过 tox 实现多环境测试

5.文档

文档:与 Sphinx 集成生成文档

通过合理使用 setuptools,可以实现从代码管理到分发的全流程标准化,建议结合 pyproject.toml (PEP 621) 实现更现代的配置方式。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Python中setuptools的模块的功能以及使用方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯学习大纲

(致酷德与热爱算法、编程的小伙伴们) 在查阅了相当多的资料后,发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以,干脆自己整理一篇,欢迎大家补充! 一、蓝桥必备高频考点 我们以此为重点学习…

Go 错误处理与调试:面向对象的入门教程

Go 错误处理与调试:面向对象的入门教程 Go 语言因其简洁、高效和易于并发编程的特性,逐渐成为后端开发的主流语言之一。错误处理是任何编程语言中非常重要的一部分,尤其是在 Go 语言中,Go 提供了一种不同于传统异常处理机制的错误…

Linux探秘坊-------4.进度条小程序

1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后&#xff0c;会 先停顿两秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;为什么会后打印呢&#xff1f; 因为&#xff…

基于Python的Diango旅游数据分析推荐系统设计与实现+毕业论文(15000字)

基于Python的Diango旅游数据分析推荐系系统设计与实现毕业论文指导搭建视频&#xff0c;带爬虫 配套论文1w5字 可定制到某个省份&#xff0c;加40 基于用户的协同过滤算法 有后台管理 2w多数据集 可配套指导搭建视频&#xff0c;加20 旅游数据分析推荐系统采用了Python语…

Scrapy:DownloaderAwarePriorityQueue队列设计详解

DownloaderAwarePriorityQueue 学习笔记 1. 简介 DownloaderAwarePriorityQueue 是 Scrapy 中一个高级的优先级队列实现&#xff0c;它不仅考虑请求的优先级&#xff0c;还会考虑下载器的负载情况。这个队列为每个域名&#xff08;slot&#xff09;维护独立的优先级队列&#…

dify-AI 私有部署可修改前端页面

dify文档 官方文档&#xff1a;欢迎使用 Dify | Dify 源码&#xff1a;https://github.com/langgenius/dify.git 安装docker 官网&#xff1a;https://www.docker.com/ 部署服务到docker cd dify cd docker cp .env.example .env docker compose up -d查看效果 http://localh…

PHP基础部分

但凡是和输入、写入相关的一定要预防别人植入恶意代码! HTML部分 语句格式 <br> <hr> 分割符 <p>插入一行 按住shift 输入! 然后按回车可快速输入html代码(VsCode需要先安装live server插件) html:<h1>标题 数字越大越往后</h1> <p…

【Elasticsearch】Retrieve inner hits获取嵌套查询的具体的嵌套文档来源,以及父子文档的来源

Retrieve inner hits 是 Elasticsearch 中的一个功能&#xff0c;用于在嵌套查询或父子查询中&#xff0c;返回导致主文档匹配的具体嵌套对象或子/父文档的详细信息&#xff0c;帮助用户更直观地理解查询结果的来源。 在 Elasticsearch 中&#xff0c;Retrieve inner hits是一…

SpringCloud面试题----eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别

dEureka 和 Zookeeper 都可以提供服务注册与发现的功能,它们的区别主要体现在以下几个方面: 设计理念 Eureka:是基于 RESTful 风格设计的,强调简单、轻量级,旨在为微服务架构提供一种易于使用的服务发现解决方案,注重服务的可用性和灵活性。Zookeeper:最初是为分布式协…

数据库提权总结

Mysql提权 UDF提权是利用MYSQL的自定义函数功能&#xff0c;将MYSQL账号转化为系统system权限 前提&#xff1a; 1.UDF提权条件 &#xff08;1&#xff09;Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。 &#xff08;2&#xff09;Mysql…

“深入浅出”系列之QT:(10)Qt接入Deepseek

项目配置&#xff1a; 在.pro文件中添加网络模块&#xff1a; QT core network API配置&#xff1a; 将apiUrl替换为实际的DeepSeek API端点 将apiKey替换为你的有效API密钥 根据API文档调整请求参数&#xff08;模型名称、温度值等&#xff09; 功能说明&#xff1a; 使…

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我们已经将进程通信部分讲完了&#xff0c;现在我们来讲一个进程部分也非常重要的知识点——信号&#xff0c;信号也是进程间通信的一…

nginx负载均衡, 解决iphash不均衡的问题之consistent

原因分析 客户端IP分布不均&#xff1a;部分IP段请求集中&#xff0c;导致哈希到同一后端。 服务器数量变动&#xff1a;增删节点时&#xff0c;传统ip_hash未使用一致性哈希&#xff0c;导致分布重置。 哈希键范围过小&#xff1a;例如仅使用IPv4前24位&#xff0c;不同IP可…

[C++]多态详解

目录 一、多态的概念 二、静态的多态 三、动态的多态 3.1多态的定义 3.2虚函数 四、虚函数的重写&#xff08;覆盖&#xff09; 4.1虚函数 4.2三同 4.3两种特殊情况 &#xff08;1&#xff09;协变 &#xff08;2&#xff09;析构函数的重写 五、C11中的final和over…

WEB安全--SQL注入--PDO与绕过

一、PDO介绍&#xff1a; 1.1、原理&#xff1a; PDO支持使用预处理语句&#xff08;Prepared Statements&#xff09;&#xff0c;这可以有效防止SQL注入攻击。预处理语句将SQL语句与数据分开处理&#xff0c;使得用户输入的数据始终作为参数传递给数据库&#xff0c;而不会直…

ES12 weakRefs的用法和使用场景

ES12 (ECMAScript 2021) 特性总结&#xff1a;WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性&#xff0c;用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象&#xff0c;即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使…

50页精品PPT | 某大数据资产平台建设项目启动会材料

该PPT主要介绍了某集团大数据资产平台建设项目的启动会材料&#xff0c;围绕数据作为数字经济时代核心生产要素的背景&#xff0c;结合国家战略和集团数字化转型需求&#xff0c;分析了当前数据资源整合不足、孤岛现象严重、质量管控薄弱及共享机制不完善等问题&#xff0c;提出…

8.【线性代数】——求解Ax=b

八 求解Axb 1. 解Axb求特解 x p x_p xp​求特解 x n x_n xn​所有解 2. Axb什么时候有解3. A m ∗ n A_{m * n} Am∗n​不同秩的Axb解分析3.1 列满秩 rn<m3.2 行满秩 rm<n3.3 rmn3.4 r<m 且 r < n3.5 综述 1. 解Axb 求解 { x 1 2 x 2 2 x 3 2 x 4 b 1 2 x 1…

动静态链接与加载

目录 静态链接 ELF加载与进程地址空间&#xff08;静态链接&#xff09; 动态链接与动态库加载 GOT表 静态链接 对于多个.o文件在没有链接之前互相是不知到对方存在的&#xff0c;也就是说这个.o文件中调用函数的的跳转地址都会被设定为0&#xff08;当然这个函数是在其他.…

Web 后端 请求与响应

一 请求响应 1. 请求&#xff08;Request&#xff09; 客户端向服务器发送的HTTP请求&#xff0c;通常包含以下内容&#xff1a; 请求行&#xff1a;HTTP方法&#xff08;GET/POST等&#xff09;、请求的URL、协议版本。 请求头&#xff08;Headers&#xff09;&#xff1a;…