(实用)Python模块打包-setuptools

前言

        平时造好的轮子,最后还是有给大家使用的一天。完整的记录一下,如何把Python模块打包成whl(wheel) 文件或者gz压缩文件。打包时会用到setuptools(60.5.0)工具。

目录

一.什么是setuptools?

setuptools 库中一些常用函数

二.编写setup.py文件

1.创建一个setup.py文件.

2.调用setuptools的setup 方法,参数如下

3.代码示例

三.执行打包

3.1.执行打包语句

3.1.1 打包成 wheel

3.1.2 打包成 xxx-version.tar.gz

3.2.验证

四.安装

4.1安装whl

4.2 安装gz

总结


一.什么是setuptools?

setuptoolssetuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。Python还可以帮助我们管理第三方依赖包。

setuptools 库中一些常用函数

  1. setup()  setup() 函数是 setuptools 最重要的函数之一,用于定义和配置一个 Python 包的元数据和依赖关系。它接受一系列参数,例如 nameversionauthordescription 等,用于指定包的基本信息和描述。

  2. find_packages() find_packages() 函数用于自动发现并返回当前目录及其子目录下的所有 Python 包。它检查 __init__.py 文件来判断目录是否是一个包,可以在 setup() 函数的 packages 参数中使用。

  3. setup_requires() setup_requires 参数用于指定构建时需要的其他依赖项。这些依赖项会在执行 setup() 函数之前被安装。

  4. install_requires() install_requires 参数用于指定运行时需要的其他依赖项。这些依赖项会在用户安装包时自动安装。

  5. entry_points() entry_points 参数用于定义可执行脚本或命令行工具的入口点。可以通过指定不同的分组来配置不同的入口点,例如 console_scriptsgui_scripts 等。

  6. extras_require() extras_require 参数用于定义额外的可选依赖项。这些依赖项可以在安装时通过指定选项的方式安装,例如 pip install package[option]

  7. setup_tools.setup() setup() 函数的一个别名,使用该函数可以实现与 distutils.core.setup() 函数兼容。

二.编写setup.py文件

1.创建一个setup.py文件.

        在项目根目录下,创建一个setup.py文件,方便将需要打包的模块找到.

        setup.py文件无论打包还是安装都会用到,在setup.py文件中描述清楚这个模块的信息以及依赖项。

2.调用setuptools的setup 方法,参数如下

  • name : 打包起来的包的文件名(必填)
  • version : 版本号,添加为打包文件的后缀名(必填)
  • author : 作者
  • author_email : 作者的邮箱
  • py_modules : 打包的.py文件
  • packages: 一个列表,指定包的名称(相对于当前目录),可以使用 find_packages() 函数自动查找并包含所有包
  • include_package_data :  项目里会有一些非py文件,比如html和js等,这时候就要靠include_package_data 和 package_data 来指定了。package_data:一般写成{‘your_package_name’: [“files”]}, include_package_data还没完,还需要修改MANIFEST.in文件.MANIFEST.in文件的语法为: include xxx/xxx/xxx/.ini/(所有以.ini结尾的文件,也可以直接指定文件名)
  • license : 支持的开源协议
  • description : 对项目简短的一个形容
  • long_description :包的详细描述,通常使用 README.md 文件的内容。
  • ext_modules : 是一个包含Extension实例的列表,Extension的定义也有一些参数。
  • ext_package : 定义extension的相对路径
  • requires : 定义依赖哪些模块
  • provides : 定义可以为哪些模块提供依赖
  • data_files :指定其他的一些文件(如配置文件),规定了哪些文件被安装到哪些目录中。如果目录名是相对路径,则是相对于sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中。
  • url 项目的主页 URL
  • python_requires 指定运行该包所需的最低 Python 版本
  • keywords 包的关键字列表
  • classifiers 一个列表,指定包的所属分类标签,如开发状态、许可证、操作系统等

3.代码示例

from setuptools import setup, find_packages

setup(
    name="example",  # 包名
    version="1.0.0",  # 版本号
    author="Your Name",  # 作者名字
    author_email="you@example.com",  # 作者邮箱
    description="A short description of this project",  # 描述
    long_description="A longer description of this project",  # 详细描述
    url="https://github.com/yourusername/example",  # 主页 URL
    packages=find_packages(),  # 包列表
    install_requires=["numpy", "scipy"],  # 运行时依赖关系
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "Programming Language :: Python :: 3.8",
        "Topic :: Software Development :: Libraries :: Python Modules",
    ],  # 分类标签
)

三.执行打包

3.1.执行打包语句

在set_up.py 文件夹下打开终端,执行set_up.py.

安装包有两种结果 whl文件或者tar.gz文件,可按照自身需求去选择。

3.1.1 打包成 wheel

python setup.py bdist_wheel

 执行成功后, 在项目文件夹下,生成dist文件夹

dist文件夹中的whl文件就是打包好的轮子 

3.1.2 打包成 xxx-version.tar.gz

python setup.py sdist

3.2.验证

        查看打包的模块 wheel 直接将whl改成zip,可以看到被打包的内容

四.安装

4.1安装whl

pip install XXXXX.whl

4.2 安装gz

        解压缩gz文档后,打开文件夹,执行setup.py,模块将会被安装到解释器对应的Lib/site-packages目录下。

python setup.py install

总结

        在使用 setuptools 库时,以下是一些需要注意的事项

  1. 正确安装 setuptools 在使用 setuptools 之前,确保已正确安装了该库。可以通过运行 pip install setuptools 命令来安装 setuptools

  2. 导入正确的模块:在您的脚本中,确保正确导入所需的 setuptools 模块。通常使用 from setuptools import setup, find_packages 来导入所需的函数和类。

  3. 使用 setup() 函数:核心操作是使用 setup() 函数来配置和定义包的元数据和依赖关系。确保在脚本中调用此函数,并提供适当的参数来设置项目配置。

  4. 指定包和模块:通过 packages 参数指定要打包的包名称列表,可以使用 find_packages() 函数自动查找并包含所有包。如果只需发布单个模块,可以使用 py_modules 参数指定单个模块文件。

  5. 处理依赖关系:使用 install_requires 参数指定项目的运行时依赖项。可以通过字符串列表或从文件中读取的字符串来指定依赖关系。

  6. 编写 README 文件:建议编写一个名为 README.md 的文件,其中包含项目的详细描述。将 long_description 参数设置为 README.md 文件的内容,以便在 PyPI 上显示该描述。

  7. 添加其他元数据:通过使用参数如 authorauthor_emailurllicenseclassifiers 等来提供包的其他元数据信息。

  8. 构建和发布包:使用 python setup.py sdist bdist_wheel 命令构建软件包,生成源码分发包和二进制 wheel 包。然后可以使用 twine 工具将软件包上传到 PyPI 上。

  9. 其他功能和选项setuptools 还提供了其他功能和选项,如定义插件、代码生成、资源管理等。您可以通过参考官方文档和其他教程来了解更多细节。

  10. 注意版本兼容性:请注意在开发和测试过程中要确保 setuptools 和其他依赖库的版本兼容性。特别是当您升级或切换到新版本时,请留意可能的功能变化或不兼容性。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python是一种高级编程语言,因其简单易学、高效和可拓展性而备受开发者的青睐。Python不仅适用于编写脚本和小型应用程序,还可以与其他语言编写的软件进行交互和拓展。Python可以让开发者快速开发应用程序,并且可以很容易地将Python代码转换成可执行文件,方便其他用户在没有Python环境的情况下使用Python编写的应用程序。 然而,Python代码被编译为可执行文件后,可能会受到一些限制。例如,不能使用某些Python库或模块,或者需要手动安装特定的依赖项。要解决这个问题,可以使用PyInstaller等工具将Python代码打包成一个单独的可执行文件,并包含所有必需的依赖项和配置文件。 下面是一些步骤,可以实现Python代码的打包和配置: 第一步,安装PyInstaller 在Windows上安装PyInstaller时,可以使用pip命令: ```pip install pyinstaller``` 在MacOS或Linux上,可以使用以下命令进行安装: ```sudo apt-get install pyinstaller``` 或 ```brew install pyinstaller``` 第二步,创建配置文件 创建一个包含pyinstaller命令行选项的文件,例如,spec文件,来指定打包的方式和配置。可以使用以下命令创建一个spec文件: ```pyinstaller --name=appname run.py``` 这将自动生成一个spec文件,其中包含有关项目、依赖项和配置的信息。 第三步,自定义spec文件 修改spec文件并添加必要的内容,例如图标、UI主题和其他自定义设置。例如,以下命令行选项将设置应用程序的图标: ```--icon=app.ico``` 或者,可以使用以下命令行选项设置UI主题: ```--theme=material``` 其他常见的命令行选项和配置信息,请参见PyInstaller文档。 第四步,构建应用程序 使用以下命令来构建应用程序: ```pyinstaller appname.spec``` 这将构建应用程序并将其打包成一个单独的可执行文件,可以在Windows、MacOS或Linux上运行。一旦构建成功,应用程序文件将在dist目录中生成。 总结: Python是一种非常实用的编程语言。使用Python打包配置文件exe文件,可以通过PyInstaller等工具将Python代码打包成一个单独的可执行文件,并包含所有必需的依赖项和配置文件。同时需要注意到,在打包时需要进行一些配置,才能获得较好的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Marst·Writer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值