[361]python包管理工具setuptools
发布日期:2021-05-16 09:26:15 浏览次数:18 分类:精选文章

本文共 3272 字,大约阅读时间需要 10 分钟。

setutils: Python包打包与分发的强大工具

setuptools 是 Python 标准库 distutils 的一个增强版本,它为 Python 开发者提供了一套更为简便和强大的工具,用于创建、打包和分发 Python 包。通过 setutils,开发者可以轻松管理依赖项,快速构建高质量的 Python 包,同时无需预先安装 setutils 即可使用。

1. 基本打包流程

使用 setutils 创建一个简单的 Python 包,步骤简单明了:

cd /tmp
mkdir demo
cd demo
touch setup.py

打开 setup.py 文件,添加以下内容:

from setuptools import setup, find_packages
setup(
name="demo",
version="0.1",
packages=find_packages(),
)

运行以下命令打包:

python setup.py bdist_egg

打包后,会在当前目录下生成 dist 目录,包含一个名为 demo-0.1-py2.7.egg 的 egg 包。

2. setup() 函数的核心参数

setup() 函数接受多个关键参数,用于定义包的基本信息和打包规则:

  • name:指定包的名称。
  • version:指定包的版本号。
  • packages:指定要打包的 Python 包路径,默认使用 find_packages() 寻找所有包。
  • include_package_data:启用清单文件(如 MANIFEST.in),包含非源代码文件。

3. 包含静态文件

为了包含静态文件(如图片、CSS、JavaScript),可以使用 MANIFEST.in 文件清单:

mkdir -p setup-demo/MANIFEST.in

在 MANIFEST.in 文件中,添加以下内容:

recursive-include static/

setup.py 中启用清单文件,并指定 include_package_data=True

from setuptools import setup, find_packages
setup(
name="static-package",
version="1.0",
packages=find_packages(),
include_package_data=True,
)

4. 自动安装依赖项

为了确保依赖包的自动安装,可以在 setup.py 中指定 install_requires 参数:

from setuptools import setup, find_packages
setup(
name="myapp",
version="1.0",
packages=find_packages(),
install_requires=[
"requests>=2.26.0",
"pandas>=1.5.0",
],
)

5. 使用 entry points 定义 CLI 工作流程

通过 entry_points 参数,可以将包中的脚本注册为命令行工具:

from setuptools import setup, find_packages
setup(
name="myapp",
version="1.0",
packages=find_packages(),
entry_points={
"console_scripts": [
"myapp= myapp.main:main",
],
},
)

安装后,可以通过命令 myapp 直接运行。

6. 高级打包配置

在更复杂的项目中,setup.py 可以通过以下参数进行进一步优化:

  • zip_safe=False:防止将 egg 包压缩为 zip 格式。
  • long_description:提供详细的包描述信息。

7. 包含数据文件

除了静态文件,setup.py 还支持包含其他类型文件(如文档、配置文件等),可以通过 package_data 参数指定:

from setuptools import setup, find_packages
setup(
name="data-package",
version="1.0",
packages=find_packages(),
package_data={
"": ["*.txt"],
"data": ["data/*.dat"],
},
)

8. 自动搜索 Python 包

find_packages() 函数可以自动搜索项目中的 Python 包,避免手动列出每个包路径:

from setuptools import setup, find_packages
setup(
name="auto-find-packages",
version="1.0",
packages=find_packages("src"),
)

9. MANIFEST.in 清单文件

MANIFEST.in 文件用于指定要包含的文件和目录,setup.py 会根据清单生成最终的 egg 包:

MANIFEST.in
recursive-include static/

10. 发布到 PyPI

要将包发布到 Python 包索引(PyPI),需要:

  • 注册 PyPI 账号。
  • 使用 setup.py sdist bdist_egg 生成打包文件。
  • 使用 twine upload 命令发布到 PyPI。
  • 11. 开发模式安装

    使用 setup.py develop 命令,包会创建符号链接,而不是复制文件,方便开发和调试:

    python setup.py develop

    安装后,修改会自动反映到 site-packages 目录。

    12. 卸载和重新安装

    卸载现有版本并安装最新版本:

    python setup.py uninstall

    13. 示例项目

    以下是一个完整的示例项目,展示了如何使用 setutils 创建和发布一个功能丰富的 Python 包:

    from setuptools import setup, find_packages, Command
    from setuptools.command import install
    class InstallCommand(Command):
    def run(self, *args):
    self.execute("python setup.py install", "")
    print("安装完成!")
    setup(
    name="myapp",
    version="1.0",
    packages=find_packages("src"),
    include_package_data=True,
    install_requires=[
    "requests>=2.26.0",
    "pandas>=1.5.0",
    ],
    cmdclass=["install"] = InstallCommand,
    )

    总结

    setutils 是 Python 打包和分发的强大工具,它简化了包的创建和管理流程,支持依赖管理、清单文件、命令行工具注册等功能。通过合理使用 setutils,开发者可以创建高质量、易于安装和分发的 Python 包。

    上一篇:[362]win环境如何一下删除多个文件
    下一篇:[360]python的termcolor模块

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月22日 06时53分58秒