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

python打包工具setuptools

setuptools 是 Python 的一个库,它是用于创建和管理 Python 包(Package)和分发(Distribution)的事实标准工具。 它的主要目的是让你能够轻松地打包你的 Python 项目,以便于分发和安装。

简单来说,它帮你把一堆 .py 文件、数据文件、文档等,打包成一个源代码分发包sdist,通常是 .tar.gz 文件)或一个构建分发包wheel,通常是 .whl 文件)。然后,用户可以使用 pip 来安装这些包。

它解决了什么问题?

想象一下,如果没有 setuptools/pip,你要如何分享你的项目?

  1. 你把代码发给别人。
  2. 他们需要手动将文件复制到正确的目录。
  3. 他们需要手动安装所有依赖项。
  4. 如果项目有 C 扩展,他们需要手动编译,这在不同平台上会非常复杂。

setuptools 将这个过程完全自动化了:

:用 setuptools 定义一个配置文件(如 setup.py 或 setup.cfg 或 pyproject.toml),声明项目元信息(名字、版本、作者等)、依赖项、入口点等。

:使用 setuptools 的命令行工具(或通过 pip)来构建分发包。

用户:只需一条命令 pip install your-package-name 即可完成所有安装步骤(依赖解析、编译、复制文件等)。

核心功能与概念

项目元数据(Metadata)
定义包的基本信息,如 nameversionauthordescriptionurllicense 等。这些信息会出现在 PyPI(Python Package Index)上,并被 pip 识别。

依赖管理(Dependency Management)

install_requires:声明你的包运行时必须依赖哪些其他包。当用户用 pip 安装你的包时,这些依赖会自动被安装。

extras_require:声明一些可选的依赖组,用于安装额外的功能。例如 pip install "your-package[dev]" 会安装开发所需的额外依赖。

包发现(Package Discovery)
自动在项目目录中找到所有的包(即包含 __init__.py 的文件夹),你无需手动列出它们。你也可以通过 packages 参数手动指定。

入口点(Entry Points)
这是一个非常强大的功能,它允许你:

创建命令行工具:定义一个函数,然后通过入口点注册,setuptools 会自动为你生成一个命令行脚本。用户安装你的包后,就可以直接在终端中使用这个命令。

# setup.py

entry_points={

    'console_scripts': [

        'my-command = my_package.module:main_function',

    ],}

插件系统:其他包可以定义入口点,你的包可以去发现并加载这些入口点,从而实现灵活的插件架构。

包含非代码文件
通过 package_data 和 include_package_data 参数,你可以将模板、静态文件(如 CSS/JS)、配置文件等一并打包到分发包中。

如何使用?

历史上,setuptools 主要通过一个名为 setup.py 的 Python 脚本来配置。

传统方式(setup.py

from setuptools import setup, find_packages

setup(

    name="my-awesome-project",

    version="0.1.0",

    author="Your Name",

    author_email="your.email@example.com",

    description="A short description of my project",

    long_description=open('README.md').read(),

    long_description_content_type="text/markdown",

    url="https://github.com/you/my-awesome-project",

    packages=find_packages(), # 自动发现所有包

    classifiers=[

        "Programming Language :: Python :: 3",

        "License :: OSI Approved :: MIT License",

        "Operating System :: OS Independent",

    ],

    python_requires='>=3.6',

    install_requires=[ # 声明依赖

        'requests>=2.25.1',

        'numpy',

    ],

    entry_points={ # 创建命令行工具

        'console_scripts': [

            'my-cli-tool = my_package.cli:main',

        ],

    },

    package_data={ # 包含包内的数据文件

        'my_package': ['data/*.json', 'templates/*.html'],

    },)

然后,你可以使用以下命令来构建和安装:

# 从源代码就地安装(用于开发)

pip install -e .

# 构建源代码分发包

python setup.py sdist

# 构建 wheel 分发包

python setup.py bdist_wheel

现代方式(pyproject.toml
随着 PEP 518 和 PEP 621 的推出,现代 Python 打包更推荐将配置移到一个 pyproject.toml 文件中,这更清晰,且不依赖于特定的构建工具。

toml

# pyproject.toml[build-system]requires = ["setuptools>=61.0.0", "wheel"]build-backend = "setuptools.build_meta"

[project]name = "my-awesome-project"version = "0.1.0"authors = [

  { name="Your Name", email="your.email@example.com" },]description = "A short description of my project"readme = "README.md"requires-python = ">=3.6"license = { file = "LICENSE" }classifiers = [

    "Programming Language :: Python :: 3",

    "License :: OSI Approved :: MIT License",

    "Operating System :: OS Independent",]

dependencies = [

    "requests>=2.25.1",

    "numpy",]

[project.scripts]my-cli-tool = "my_package.cli:main"

[tool.setuptools.package-data]my_package = ["data/*.json", "templates/*.html"]

使用 pip 来构建和安装(这是现代的最佳实践):

# 从源代码安装(用于开发)

pip install -e .

# 构建分发包 (这会同时生成 sdist 和 wheel)

pip install build

python -m build

总结

特性

描述

是什么

Python 打包的事实标准工具。

核心作用

将你的代码、依赖、元信息等打包成一个可分发的格式。

关键功能

元数据管理、依赖声明、自动包发现、创建命令行工具、插件系统。

配置文件

传统用 setup.py,现代用 pyproject.toml。

如何使用

编写配置文件,然后用 pip install . 安装或用 python -m build 构建分发包。

与 pip 关系

setuptools 负责构建包,pip 负责安装包(包括从 PyPI 下载、解决依赖等)。

可以说,setuptools 是现代 Python 生态(PyPI 和 pip)的基石之一,没有它,Python 的包管理不会像今天这样强大和便捷。


文章转载自:

http://nQJEWYDd.fLhkL.cn
http://pNYjLDeE.fLhkL.cn
http://2H0wDRnB.fLhkL.cn
http://jsXUutKk.fLhkL.cn
http://gVP3EmUY.fLhkL.cn
http://XrFYYULJ.fLhkL.cn
http://bCNRaxg7.fLhkL.cn
http://n13YU7lM.fLhkL.cn
http://cP69gJVk.fLhkL.cn
http://r7VwcgIe.fLhkL.cn
http://Pf4uzjfd.fLhkL.cn
http://8uFpA7w6.fLhkL.cn
http://x8KE3XWI.fLhkL.cn
http://YwVHmpBR.fLhkL.cn
http://kvY7Bibk.fLhkL.cn
http://3UHPplzI.fLhkL.cn
http://ZuiiilM0.fLhkL.cn
http://Vcdq2Mz9.fLhkL.cn
http://zvt6EEmS.fLhkL.cn
http://TNkRfcjN.fLhkL.cn
http://4U0qJmCQ.fLhkL.cn
http://i5zA5i3W.fLhkL.cn
http://oGAhSB4q.fLhkL.cn
http://bzupNl2V.fLhkL.cn
http://ee6K4kdh.fLhkL.cn
http://jAEniB0C.fLhkL.cn
http://f50ZBvG0.fLhkL.cn
http://AQFkcK8c.fLhkL.cn
http://DJGLtDMx.fLhkL.cn
http://ZPyQLfMV.fLhkL.cn
http://www.dtcms.com/a/370277.html

相关文章:

  • 屏幕小管家——图像识别自动操作助手
  • hbuilderX的gite项目怎么看项目地址
  • 【MFC】对话框节点属性:Language(语言)
  • 联邦学习论文分享:Towards Building the Federated GPT:Federated Instruction Tuning
  • 【Neovim】Vi、Vim、Neovim 与 LazyVim:发展史
  • Eigen中Eigen::Affine3d和Eigen::Isometry3d详解
  • 得物前端二面面经总结
  • 如何离线安装 VirtualMachinePlatform
  • Redisson分布式事务锁
  • 浪潮CD1000-移动云电脑-RK3528芯片-2+32G-安卓9-2种开启ADB ROOT刷机教程方法
  • 详解文件操作
  • 网络通信 IO 模型学习总结基础强化
  • 分布式go项目-搭建监控和追踪方案
  • python炒股
  • SpringBoot01-配置文件
  • 深度学习——数据增强(Data Augmentation)
  • 【Python自动化】 21.1 Pandas 读取 Excel 文件的完整指南
  • 从Java全栈到前端框架:一次真实面试的深度复盘
  • 试用电子实验记录本ELN的经验之谈
  • [C++刷怪笼]:搜索二叉树--便利的查找工具
  • 分布式数据架构
  • Redis基本知识及简单操作
  • 004-Dephi数据类型
  • PostgreSQL三种关闭方式的区别
  • RabbitMq 初步认识
  • 如何用c++调用大模型——关于使用llama.cpp的lib库的简易教程
  • 力扣29. 两数相除题解
  • PyTorch 模型文件介绍
  • Valgrind检测内存泄漏入门指南
  • echarts实现点击图表添加标记