使用SetupTools 管理你的项目打包工作

Setuptools 是一个用于 Python 的包管理工具,主要用于构建、打包和分发 Python 软件包。它是 distutils 的增强版,提供了更多的功能和灵活性,是 Python 包管理的核心模块之一。

功能与特点

  1. 依赖管理:Setuptools 提供了强大的依赖管理功能,可以自动解析和安装软件包所需的依赖项。
  2. 自动生成入口点:它能够自动发现并生成命令行脚本的入口点,例如将 Python 脚本转换为可执行文件。
  3. 模块发现 :通过 find_packages() 函数,Setuptools 可以自动发现并包含所有包含 __init__.py 文件的目录。
  4. 打包与分发:Setuptools 支持创建多种格式的包,包括 wheel、sdist 和 egg 等,并可以通过 pip 等工具进行分发。
  5. 扩展支持 :它允许开发者通过扩展(如 setuptools.command)来添加自定义构建步骤或命令。
  6. 元数据管理 :通过 setup.py 文件,开发者可以定义软件包的元数据,如名称、版本、作者信息等。

安装方法

Setuptools 可以通过 pip 安装:

bash 复制代码
pip install setuptools

安装完成后,可以通过以下命令验证是否安装成功:

bash 复制代码
pip list | grep setuptools

通常情况下,安装 Python 和 pip 后,setuptools 会默认自带。

使用场景

  1. 打包与发布:开发者可以使用 setuptools 将自己的代码打包成一个可安装的 Python 包,并上传到 PyPI(Python Package Index)供他人下载和使用。
  2. 依赖管理 :在项目中,可以通过 setup.py 文件指定项目所需的依赖包,并在运行时自动安装这些依赖。
  3. 自动化构建 :通过编写 setup.py 脚本,可以实现自动化构建、安装和发布的过程。

常用命令

  • python setup.py build:构建项目。
  • python setup.py install:安装项目。
  • python setup.py sdist:生成源码包。
  • python setup.py bdist_wheel:生成 wheel 包。

示例代码

以下是一个简单的 setup.py 文件示例:

python 复制代码
from setuptools import setup, find_packages

setup(
    name="example",
    version="0.1",
    packages=find_packages(),
    install_requires=[
        "numpy",
        "scipy"
    ],
    entry_points={
        "console_scripts": [
            "example = example.__main__:main"
        ]
    }
)

在这个示例中,find_packages() 自动发现并包含所有模块,install_requires 指定了依赖项,entry_points 定义了命令行脚本。

Setuptools 是 Python 开发中不可或缺的工具之一,它简化了包的构建、分发和管理过程。无论是个人开发者还是企业用户,都可以通过它高效地管理和发布 Python 软件包。

要使用Setuptools创建包含多个子包的复杂Python项目,可以按照以下步骤进行:

  1. 创建项目结构
    首先,创建一个项目目录,并在其中创建子包。每个子包应该包含一个__init__.py文件,即使该文件为空。例如:

    复制代码
    my_project/
    ├── setup.py 
    ├── my_project/
    │   ├── __init__.py
    │   ├── subpackage1/
    │   │   ├── __init__.py
    │   │   └── module1.py 
    │   └── subpackage2/
    │       ├── __init__.py
    │       └── module2.py 
  2. 编写setup.py文件
    setup.py是Setuptools的核心配置文件,用于定义项目的元数据和打包选项。对于包含多个子包的项目,可以使用find_packages()函数自动发现所有子包。以下是一个示例setup.py文件:

python 复制代码
   from setuptools import setup, find_packages

   setup(
       name='my_project',
       version='0.1',
       packages=find_packages(),
       install_requires=[
           'requests',
           'numpy',
           # 其他依赖项
       ],
       author='你的名字',
       author_email='你的邮箱',
       description='项目的简短描述',
       long_description=open('README.md ').read(),
       long_description_content_type='text/markdown',
       url='项目的URL',
       classifiers=[
           'Development Status :: 3 - Alpha',
           'Intended Audience :: Developers',
           'License :: OSI Approved :: MIT License',
           'Programming Language :: Python :: 3',
           'Programming Language :: Python :: 3.6',
           'Programming Language :: Python :: 3.7',
           'Programming Language :: Python :: 3.8',
           'Programming Language :: Python :: 3.9',
       ],
       python_requires='>=3.6',
   )

在这个示例中,find_packages()函数会自动查找并包含所有子包。install_requires参数用于指定项目的依赖项。

  1. 创建README.md文件
    README.md文件用于提供项目的详细描述,可以使用Markdown格式编写。这个文件的内容会被读取并显示在PyPI页面上。

  2. 构建和发布项目

    使用build工具来构建项目。首先,确保已经安装了build工具:

bash 复制代码
   pip install build

然后,运行以下命令来构建项目:

bash 复制代码
   python -m build

构建完成后,会在项目目录下生成一个dist文件夹,其中包含.tar.gz.whl文件,即Python包。

  1. 发布到PyPI
    使用twine工具将构建好的包发布到PyPI。首先,确保已经安装了twine工具:
bash 复制代码
   pip install twine

然后,运行以下命令来发布包:

bash 复制代码
   twine upload dist/*

运行上述命令后,会提示你输入PyPI的用户名和密码。发布成功后,其他人就可以通过pip install my_project来安装你的项目了。

通过以上步骤,你可以使用Setuptools创建并发布一个包含多个子包的复杂Python项目。

相关推荐
文火冰糖的硅基工坊13 分钟前
[人工智能-大模型-72]:模型层技术 - 模型训练六大步:①数据预处理 - 基本功能与对应的基本组成函数
开发语言·人工智能·python
Python×CATIA工业智造2 小时前
Pycatia二次开发基础代码解析:组件识别、选择反转与链接创建技术解析
python·pycharm
小宁爱Python2 小时前
从零搭建 RAG 智能问答系统 6:Text2SQL 与工作流实现数据库查询
数据库·人工智能·python·django
m0_748241232 小时前
Java注解与反射实现日志与校验
java·开发语言·python
可触的未来,发芽的智生3 小时前
追根索源:换不同的词嵌入(词向量生成方式不同,但词与词关系接近),会出现什么结果?
javascript·人工智能·python·神经网络·自然语言处理
hu_nil3 小时前
LLMOps-第十一周作业
python·vllm
阿Q说代码4 小时前
IPIDEA实现数据采集自动化:高效自动化采集方案
运维·python·自动化·数据采集
大模型真好玩4 小时前
OCR技术简史: 从深度学习到大模型,最强OCR大模型花落谁家
人工智能·python·deepseek
AI量化投资实验室5 小时前
年化591%,回撤仅7%的策略,支持订阅信号|基于AgentScope开发金融多智能体,附python代码
开发语言·python·金融
CaracalTiger5 小时前
告别云端依赖!ComfyUI本地化视频生成实战教程+cpolar实战
python·gpt·开源·aigc·ai编程·1024程序员节·ai-native