当前Python打包生态的标准化

简单梳理当前 Python 依赖管理和构建工具生态 如果你从前只接触过 C/C++ 或是 Java,可能对 Python 自带的这个 pip 非常满意——可以一键从 PyPI (Python Package Index) 安装 Python 包。但是一旦开始正经开发项目,你就意识到 pip 是个很蠢的东西——它总是把依赖安装到全局环境里,从不给你做隔离和版本管理,一旦遇到两个项目之间的包发生冲突就直接抓瞎,毕竟你一个全局环境里显然只能安装一个版本的包。一种常见的做法是用创建虚拟环境,然后进入虚拟环境,再操作pip或python。 阅读详情

起源:终结配置碎片化

2016年,Python社区面临严重的配置碎片化问题:

  • 每个工具都有自己的配置文件(setup.py, requirements.txt, MANIFEST.in, .flake8等)
  • 动态执行的setup.py带来安全风险

PEP 518(2016)首次提出pyproject.toml概念,核心目标:

  1. 声明构建依赖(解决鸡生蛋问题)
  2. 提供统一配置入口
  3. 替代易出错的setup.py

关键推动者:

  • Donald Stufft(PyPA核心成员)
  • Nick Coghlan(Python核心开发者)
  • Poetry/Flit等现代工具开发者

“我们需要一个不会执行任意代码的静态配置文件” —— PEP 518设计原则


核心功能与使用指南

基础结构(所有项目必备)

[build-system]
requires = ["setuptools>=64.0.0", "wheel"]  # 构建依赖
build-backend = "setuptools.build_meta"    # 构建后端

项目元数据(PEP 621标准)

[project]
name = "my_project"
version = "1.0.0"
description = "革命性Python项目"
dependencies = ["requests>=2.25", "numpy"]  # 替代requirements.txt

[project.optional-dependencies]
test = ["pytest>=7.0"]
dev = ["black", "mypy"]

工具集成(收敛碎片化配置)

[tool.pytest.ini_options]
minversion = "7.0"
addopts = "-vv"

[tool.black]
line-length = 88
target-version = ["py310"]

[tool.mypy]
strict = true

解决的核心问题

问题类型旧方案pyproject.toml方案
构建依赖setup.py动态安装静态声明[build-system]
元数据分散setup.py+setup.cfg统一[project]节
工具配置碎片10+个配置文件统一[tool.*]命名空间
安全风险setup.py可执行代码纯声明式配置

版本支持时间线

  • 2016.05:PEP 518提出规范(Python 3.5+)
  • 2018:pip 10.0+ 支持构建隔离
  • 2020:PEP 621标准化[project]节
  • 2021:setuptools 61.0+ 原生支持
  • 2023:90%+主流工具支持(pytest, black, mypy等)

关键转折点:Python 3.11起官方文档推荐为首选配置


迁移实战指南

从setup.py迁移

# 旧方案
# setup.py
from setuptools import setup
setup(
    name="old_project",
    install_requires=["requests"]
)

# 新方案 → pyproject.toml
[project]
name = "new_project"
dependencies = ["requests"]

多工具配置合并

# 替代.cfg/.ini文件集群
[tool.isort]
profile = "black"

[tool.pylint]
max-line-length = 120

[tool.coverage.run]
source = ["src"]

未来演进方向

  1. PEP 660:可编辑安装标准化
  2. 动态版本支持:从Git tag自动派生版本
  3. 跨语言扩展:Rust/Python混合项目支持

“就像package.json之于Node.js,pyproject.toml正在成为Python项目的身份证明” —— PyPA技术报告

开发者行动建议

  1. 新项目:必须使用pyproject.toml
  2. 旧项目迁移:
    • 先添加[build-system]
    • 逐步迁移[project]元数据
    • 用[tool.*]替换分散配置
  3. 工具选择:优先支持PEP 621标准的工具(如PDM/Flit)

通过标准化配置入口,pyproject.toml结束了Python打包的"黑暗时代",为生态系统带来了前所未有的统一性和安全性。

Python生态结合实战:从调用C++/Rust到数据分析与打包交付 在现代软件开发中,没有一种编程语言能独立解决所有问题。Python之所以常年位居热门语言前列,核心优势在于其强大的“胶水”能力——它能与C/C++、Rust、C#、Java等语言无缝衔接,也能与数据分析、云端API、自动化脚本等场景深度融合。本文从生态结合的基础概念出发,讲解如何通过pybind11、PyO3、pythonnet等工具实现跨语言调用,并覆盖数据分析与可视化、调用讯飞星火API、量化交易策略等高频应用。同时,针对Python环境配置和打包成exe的常见痛点,给出工程化实践建议,帮助开发者理解P 阅读详情

相关推荐

Python生态:npm、Poetry和Uvicorn的黄金三角

本文对比分析了JavaScript生态的npm与Python生态工具链的核心功能与协作关系。npm作为Node.js的官方包管理器,专注于依赖管理和版本控制;而Python生态依赖PyPI仓库,需Poetry等工具管理复杂依赖。Poetry通过一体化项目管理解决了传统Python工具缺陷,而Uvicorn则提供高性能异步Web运行时。二者协作形成现代Python Web开发工作流:Poetry管理依赖和环境,Uvicorn执行应用。尽管npm与Python生态相互独立,但各自工具链在对应领域发挥着类似作用,

kcarly的专栏 928

PEP 518——指定构建Python项目的最低系统要求

注:PEP = Python Enhancement Proposal (Python增强建议书,即Python开发规范)摘要本PEP详细说明了Python软件包要在选定的构建(Build)系统上运行时,应该如何指定其依赖关系。本规范引入了一个新的配置文件,用于指定软件包的构建依赖关系(假定今后的配置会使用相同的配置文件作为参考)。基本原理当Python首次开发用于构建项目软件分发的工具时,dis...

首席IT民工的博客 1883

深入解析Python打包工具setuptools实战项目

setuptools是 Python 生态中用于构建和分发 Python 包的核心工具,它扩展了标准库中的distutils,提供了更强大的包管理能力。其主要功能包括自动依赖解析、支持egg格式分发、动态发现包模块()、以及通过实现插件系统等。相比原始的distutilssetuptools引入了对PyPI的上传支持、脚本自动生成和命名空间包机制,成为现代 Python 打包体系的重要基石。它为后续工具如pipwheel和twine。

weixin_34640289的博客 605

pyproject.toml vs setup.py:Python打包演进与技术实践指南

本文深入探讨了Python打包技术的演进,从传统的setup.py到现代的pyproject.toml标准,重点分析了PEP 517/518带来的变革。文章详细介绍了RPM环境下pyproject.toml的支持情况,包括不同RPM版本的处理方案,并以cryptography项目为例展示了包含Rust扩展的复杂打包实践。通过对比新旧打包方式的技术原理,提供了构建优化、问题排查和质量保证的具体方法,最后展望了Python打包技术的未来发展方向。本文为开发者在RPM环境中打包现代Python项目提供了全面的技术

tianyuanwo的专栏 1309

Python项目打包与管理——setuptools实用指南

在Python项目中,包管理是一个关键的过程,它涉及到安装、升级、配置和卸载软件包。setuptools是Python社区广泛使用的包管理工具之一,它扩展了早期的distutils工具,提供了更多的功能和灵活性。在Python 2.5及以后的版本中,setuptools成为了事实上的标准,广泛用于构建和分发Python包。定义项目信息是setup函数中的关键部分。nameversionauthor等字段是必须明确指定的。

weixin_31715353的博客 1834

BUCK电路为何无法实现100%占空比?自举电路原理与替代方案解析

在开关电源设计中,DC-DC转换器是实现电压变换的核心器件,其工作原理基于功率开关管的周期性导通与关断。BUCK(降压)电路作为一种经典拓扑,通过调节开关管的占空比来控制输出电压。然而,其占空比存在理论上限,无法达到100%,这一限制源于高边开关管的驱动需求。为了驱动高边N沟道MOSFET(NMOS),需要栅极电压高于源极电压,而自举(Bootstrap)电路通过利用开关节点电压的跳变,巧妙地生成了这一高压驱动信号。自举电路必须在每个开关周期内存在续流阶段(低边管导通)为电容充电,这从根本上限制了最大占空比

weixin_32239523的博客 309

深入解析 pyproject.toml 文件中的构建工具定义:setuptools和wheel

通过 pyproject.toml文件中的 [build-system] 部分,我们可以定义项目的构建工具、后端以及构建过程。

阿正的梦工坊 2553

OnePose++: Keypoint-Free One-Shot Object Pose Estimation without CAD Models

算法:首先采用LoFTR的细匹配模块,将粗匹配点周围的小窗口内,通过对比特征找到最相似的位置,细化当前特征点的位置。算法:PnP算法,利用3D点和2D投影点的对应关系,计算相机相对于物体的6D姿态(位置朝向)。算法:使用COLMAP,对2D粗匹配对(不依赖传统关键点匹配)进行特征轨迹计算并生成半稠密点云,每个3D点包含坐标和对应的2D投影点。算法:LoFTR粗匹配模块,将每一个像素点视为伪关键点,生成半稠密的2D匹配对。输入:优化后的3D、当前视图的2D特征点。输出:粗半稠密点云以及物体的特征轨迹。

雨落倾城的博客 888

PEX构建系统深度解析:PEP 517和518的完整实现指南

PEX(Python EXecutable)是一个强大的工具,用于生成Python可执行文件、锁文件和虚拟环境。作为现代Python打包生态系统的关键组件,PEX构建系统完整实现了PEP 517和PEP 518标准,为开发者提供了标准化的构建流程和依赖管理方案。🔥 ## 🚀 什么是PEX构建系统? PEX构建系统是Python生态中的一个革命性工具,它通过实现PEP 517(构建系统接口)

gitblog_00105的博客 711

FortiGate-60E防火墙忘记密码?用Console线+TFTP重装固件v7.0.9全流程

本文详细介绍了当FortiGate-60E防火墙忘记密码且物理重置无效时,如何通过Console线连接并利用TFTP服务器重装固件(如v7.0.9)的全流程。从恢复原理、工具准备、网络配置到逐步执行命令,提供了完整的实战指南,帮助管理员彻底恢复设备出厂设置并重置密码。

snow3的博客 333

从零构建高精度温控系统:ADN8835的单电感拓扑与0.01℃稳定性实战解析

本文深入解析了如何利用ADN8835构建高精度温控系统,重点介绍了其创新的单电感拓扑架构如何实现0.01℃的长期稳定性。内容涵盖精密PCB布局、电源滤波设计,并详细阐述了针对不同热容负载的数字PID控制参数整定策略,为开发精密仪器和医疗设备提供了实战指南。

r2s3t4的博客 240

Python 官方团队在打包项目中踩过的坑

????“Python猫” ,一个值得加星标的公众号花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列。原作者是 Python...

Python猫 819

MODIS 遥感数据批量下载(使用Cygwin)

MODIS 遥感数据批量下载(使用Cygwin)包含Cygwin的下载教程

weixin_45913084的博客 917

Python二进制接口(ABI)的兼容性有多难?

摘要:知名安全机构 TrailofBits 近日开发了一种新的 Python 工具,用于检查 Python 包是否存在 CPython 应用程序二进制接口违规

2601_96229748的博客 151

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

Python爬虫-爬取猫眼演出数据

本文是该专栏的第53篇,后面会持续分享python爬虫干货知识。猫眼平台除了有影院信息之外,它还涵盖了演出信息,比如说“演唱会,音乐节,话剧音乐剧,脱口秀,音乐会,戏曲艺术,相声”等等各种演出相关信息。而本文,笔者将以猫眼平台为例,基于Python爬虫实现获取各种演出信息的数据。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 572

【Python进阶】打包的艺术:创建、管理与分发你的Python项目

setuptools是Python中用于构建和打包扩展模块的标准工具集,它基于Distutils并增加了许多高级功能,比如更灵活的项目描述、自动化依赖处理等。开发者通过编写setup.py文件来定义项目的基本信息(如名称、版本、作者)、依赖关系、入口点以及如何编译C扩展等功能。随着时间推移,setuptools不断完善,支持更多现代Python项目的复杂需求。

weixin_44800376的博客 1139

【运动规划算法项目实战】如何使用Pure Pursuit算法进行路径跟踪(附ROS C++代码)

在自动驾驶和机器人导航领域,路径跟踪是一项关键技术,它使车辆或机器人能够按照预定的路径规划进行移动。路径跟踪算法的选择对于系统性能和安全性至关重要。本文将介绍一种常用且有效的路径跟踪算法——Pure Pursuit算法。我们将详细讨论Pure Pursuit算法的原理、实现步骤以及如何在自动驾驶和机器人系统中应用该算法进行路径跟踪。Pure Pursuit是一种用于路径跟踪的控制算法。它通过计算角速度控制机器人从当前位置移到机器人前方的某个预瞄点。假定线速度是恒定的,当然可以随意更改机器人的线速度。

xiewf的博客 1万+

Python包分发终极指南:深入掌握setuptools打包技术

本教程系统讲解Python包分发的​​工业级实践方案​​,聚焦setuptools工具链的​​深度应用​​。涵盖从基础包创建到高级分发策略的全流程,包含6种​​不同场景的打包范式​​,10个​​生产环境最佳实践​​,并针对C扩展、多平台支持等复杂场景提供专业解决方案。教程包含15个​​即用型代码示例​​,详细解析setup.py、setup.cfg、pyproject.toml的​​协同工作机制​​,解决依赖管理、入口点注册、数据文件包含等核心问题,帮助开发者构建​​专业级Python包​​。

YAnt的博客 1441

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pkgporter与OpenEuler生态集成:自动化打包的终极指南

前往项目官网免费下载:[https://ar.openeuler.org/ar/](https://ar.openeuler.org/ar/?utm_source=csdn_blog) 想要在OpenEuler生态系统中高效管理Perl和Python软件包吗?🤔 pkgporter正是您需要的自动化打包神器!这款专为OpenEuler设计的RPM打包机器人,能够智能处理软件包的依赖关系,简化复

gitblog_06824的博客 155

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python项目结构与打包工具实践

本文介绍了Python项目打包的现代实践方法,重点对比了传统项目布局与推荐的src-layout(源布局)两种目录结构。传统布局将代码直接放在根目录下,而src-layout将源码置于src目录中,能有效避免命名空间污染。文章详细说明了pyproject.toml作为现代构建配置文件的优势,包括标准化配置和构建环境隔离等特性。同时提供了使用python-mbuild工具进行打包的完整流程,涵盖了安装工具、执行打包、产物说明等内容。最后给出了标准的项目目录结构建议,强调src布局结合pyproject.tom

ai8086的博客 1685

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Python打包元数据困境:约束的重要性

在Python社区中,一项旨在建立新的通用锁文件标准的努力正在展开,这一努力主要在Python讨论论坛上进行。此倡议凸显了创建一个让所有人都满意的标准化方案的难度。不同Python打包工具对锁文件应有的形态和用途有着略微不同的理解。然而,在这些讨论中,另一个小问题也重新浮现:Python存在元数据问题。Python的元数据系统过于复杂,并且缺乏必要的约束。

敖行客 Allthinker的博客 1331

最完整Python指南python-guide:代码打包与发布部署指南

Python代码打包与发布部署是每个开发者必须掌握的核心技能。python-guide作为最完整的Python最佳实践指南,为开发者提供了从代码打包到发布部署的全流程解决方案。无论你是要分享库给其他开发者,还是为终端用户构建可执行文件,本指南都能帮助你快速上手。 ## 📦 Python代码打包基础 Python代码打包是将你的项目组织成标准格式,以便其他开发者能够轻松安装和使用。这是Pyth

gitblog_00256的博客 1159

python代码库-Python打包库

Python打包库译者:徐宏富Sun-2014-05-25 blog.ionelmc.ro我认为应该重新审视打包最佳做法,现如今,有许多的好的工具没有被使用过,或被充分使用。重新评估最佳的做法,通常来说一直都是件好事情。例如,现在你的python代码包要在多个python版本中测试,这些版本有着不同的依赖库和设置等。在打包时,我喜欢遵循一些基本的原则:.如果你可以使用py.test或者nose这样...

weixin_37988176的博客 595

Python 打包规范全解析:从基础到高级应用

Python 打包规范是一套用于定义 Python 包如何创建、分发和安装的规则和标准。这些规范由 Python 社区不断发展和完善,旨在解决包管理过程中的各种问题,如包的兼容性、依赖冲突、安全漏洞等。遵循这些规范可以使开发者的包更容易被其他开发者使用和集成到不同的项目中。在某些情况下,开发者可能需要根据项目的特殊需求自定义打包规范。例如,对于一些包含大量二进制文件的项目,可能需要自定义 Wheel 包的构建过程。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1244
上一篇: mac隐藏文件现身快捷键
下一篇: 用字典技术优化条件判断:更简洁的代码逻辑
旷野说
博客等级 码龄9年 361粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值