1.setuptools-python打包分发package
2.花了两天,源源码终于把 Python 的源源码 setup.py 给整明白了
3.解密Python C++库打包到wheel的正确方法
4.Python打包神器setuptools葵花宝典教程
5.python打包分发工具:setuptools
setuptools-python打包分发package
setuptools是Python最常用的打包与分发工具,允许他人通过pip install轻松安装你的源源码库。它基于distutils,源源码但提供了更丰富的源源码功能。setuptools可以将你的源源码安卓系统免费源码库打包为两种类型:源码包(source dist)和二进制包(binary dist)。
源码包(sdist)类似于.zip或.tar.gz文件,源源码包含库的源源码所有源代码和静态文件,如.txt、源源码css、源源码等。源源码打包源码包通常使用setup.py命令,源源码它需要配置打包信息,源源码如格式参数(formats),源源码默认根据平台创建.tar.gz或.zip文件。源源码执行后,你会在项目目录下发现一个dist文件夹和egg-info文件夹。安装源码包时,可以选择先解压缩,或直接使用pip安装。
二进制包(bdist)主要使用wheel格式(.whl后缀),在某些场景下安装速度更快。打包二进制包同样使用setup.py,设置格式参数(formats)即可,另外提供了其他命令用于指定打包选项。安装二进制包只需pip命令。
setup.py是Python打包的核心文件,用于指定库的基本信息、打包的文件、依赖包以及版本控制等。它通过setuptools.setup函数控制整个打包过程。此函数包含多个参数,如packages、include_package_data、exclude_package_data、package_data、网站邀请码源码data_files等,用于指定需要打包的文件。include_package_data参数根据MANIFEST.in文件来打包非源码文件,而MANIFEST.in定义了如何打包这些文件。package_data参数直接指定要被打包的文件。
在库中管理依赖包的安装与版本控制是setuptools的重要功能,通过install_requires、setup_requires、tests_require、extras_require等参数实现。设置python环境的版本限制使用python_requires参数。若需要在系统环境path中生成可执行文件或脚本,使用setup函数的entry_points和scripts参数。对于C/C++扩展,使用setup.py来编译并集成到Python中,通过ext_modules参数配置。自定义命令也是进阶功能,允许用户扩展setuptools的功能。
花了两天,终于把 Python 的 setup.py 给整明白了
为了便于理解与操作,我们首先需要明确为何要对项目进行分发与打包。在日常开发中,我们通常通过pip来安装第三方模块,这一过程之所以简便,是因为模块开发者已经为我们完成了复杂的工作。而这个工作过程即为打包,它将源代码进行进一步封装,并预先安排好项目部署,使得用户只需简单操作即可使用,无需再关注复杂的部署细节。
随着Python的发展,项目打包工具已相当成熟。让我们来了解一下其中的关键工具。
distutils是Python的一个标准库,它是拉下线源码一个基础的分发工具,从命名上可以看出其本质在于封装与分发(distribute)。它是官方提供的分发与安装指导文件setup.py的基石。
setup.py文件是模块分发与安装的核心,编写setup.py的过程包含了许多复杂的内容,我将在后续的篇章中详细解析,希望你能够耐心阅读。
你可能未曾编写过setup.py,但你一定使用过它来进行模块的安装,例如使用pip命令进行源码安装。同样,也存在通过二进制软件包进行安装的选项,关于这一点,我将在后续进行介绍。
setuptools是distutils的增强版本,虽然未包含在标准库中,它提供了更多的功能,旨在帮助开发者更高效地创建与分发Python包。大部分Python用户都使用更先进的setuptools模块。
另一个与setuptools相关的组件是distribute,它是一个分支版本,后来被合并回setuptools。因此,它们实际上代表同一工具。
另一个大型包分发工具是distutils2,该工具试图充分利用distutils、detuptools和distribute,成为Python标准库中的标准工具。但该计划未达到预期目标,现已废弃。因此,setuptools是一个非常优秀的、可靠的Python包安装与分发工具。
如果你想要在干净的环境中安装setuptools,主要有两种方法。
其中一种方法是mmc10 源码使用easy_install工具,它是一个第三方管理工具,能够提供比distutils更便捷的体验。这里简单介绍一下它的用法,尽管它现在使用较少。
easy_install支持包的安装、升级与删除。需要注意的是,删除操作仅在easy-install.pth文件中执行,使其无法在Python中使用,但实际的包仍然存在于你的电脑中。若要彻底删除,需要手动删除相关的.egg及其他文件。
默认情况下,easy_install会从pypi下载包,但由于该源在国外,下载速度可能不理想。使用过pip的朋友可能想了解,easy_install是否能够指定源进行安装呢?答案是肯定的。可以通过编辑配置文件/root/.pydistutils.cfg来实现。
总结来说,setuptools是一个专业用于包分发的工具,从安装的角度来看,它的功能看似简单。然而,其更大的意义在于包的分发,具有极高的定制化程度。我们至今仍在使用它进行版本包的发布。
Python包的分发主要分为两种方式:源码包与二进制包。源码包安装过程包括解压、编译与安装,因此它是跨平台的,但由于每次安装都需要编译,相对二进制包安装方式来说,安装速度较慢。源码包实质上是连环夺宝完整源码一个压缩包,常见的格式有...
接下来,我们深入探讨egg与wheel的区别。egg格式由setuptools在年引入,而wheel格式由PEP在年定义。Wheel被认为是Python二进制包的标准格式。以下是Wheel和egg的主要区别...
在编写setup.py时,它最关键的一步是实现。以下是一个setup.py简单的使用示例。接下来,我将逐步扩展这个setup函数,增加更多的参数,以便你能够理解setup函数的功能。
程序分类信息、文件分发、依赖包下载安装、安装环境限制、生成可执行文件分发、构建C和C++扩展包、指定release、参数列表等,都需要在setup.py文件中进行详细配置。在编写时,可能会遇到较多的参数,因此,为了方便查阅,我整理了setup函数常用的一些参数。
最后,我们介绍pbr,这是一个setuptools的辅助工具,最初是为了OpenStack开发。pbr会读取和过滤setup.cfg中的数据,然后将解析后的数据提供给setup.py作为参数。包含如下功能...
通过学习,你已经学会了如何打包自己的项目。若你认为自己开发的模块非常出色,想要与他人共享使用,你可以将其上传至PyPi(Python Package Index),它是Python官方维护的第三方包仓库,用于统一存储与管理开发者发布的Python包。首先,你需要在PyPi注册账号,然后创建~/.pypirc文件,配置PyPI访问地址和账号。接下来,使用相应的命令进行注册与上传,即可在PyPi上看到项目信息,并允许他人下载安装。
解密Python C++库打包到wheel的正确方法
当你创建扩展并需要将其打包成wheel文件发布时,正确的操作流程至关重要。为确保包的结构及依赖库的正确打包,通常需要关注两个主要方面:包的结构与依赖库如何处理。
为了深入了解wheel包的构建,可以参考opencv-python源码。它通过scikit-build与CMake实现跨平台编译,简化了不同环境的构建流程。在实际操作中,使用scikit-build的示例工程可以直观地体验wheel构建过程。例如,通过在setup.py文件中定义包名,并在CMakeLists.txt中配置编译环境,即可利用pip wheel .命令生成wheel包。
通过解压生成的wheel包,可以发现它具有特定的目录结构,包含dist-info和用户定义的包文件夹。在包文件夹中,包含编译生成的库文件及__init__.py文件,这与直接使用python setup.py bdist_wheel打包的包结构存在差异。后者将库文件直接打包在根目录下,导致库文件污染Lib\site-packages目录,影响环境安全。
若扩展依赖其他库,需考虑库的链接与打包策略。在Windows环境下,库可放在同一目录下。然而,对于Linux和macOS等系统,需要设置相对路径,并注意不同系统的配置方法。CMake作为编译工具,提供了灵活的解决方案。
若选择不使用CMake,通过setuptools同样可以实现类似效果。在setup.py文件中,需配置编译参数与依赖库拷贝策略。首先通过判断系统与CPU架构,添加相应编译参数,随后设置自定义函数,触发build_ext.build_ext.run(self)方法进行编译,生成所需的Python库,并将使用到的库文件复制至输出目录。打包命令完成后,会将输出目录下的所有文件打包为wheel文件。
针对Linux环境生成的wheel包,可能需要通过auditwheel的repair命令重新生成,以确保支持manylinux标准,从而避免无法上传至pypi的问题。
为了实现自动化流程,可在GitHub Action中创建编译、打包与发布的流程。通过此方式,可以确保各种主流Python环境的包均能正确生成。
相关源码请参见:github.com/yushulx/pyth...
Python打包神器setuptools葵花宝典教程
setuptools是用于Python项目的打包工具,它基于早期的distutils库发展而来,为解决distutils的不足而诞生。setuptools不仅增强了功能,还与pip完美兼容,提供easy_install终端命令行工具用于包的安装。尽管setuptools未被纳入标准库,但其功能的强大使它成为新Python项目的首选打包工具。同时,setuptools的胜利建立在distutils、distribute等项目的基础之上,这些项目为setuptools的发展贡献了力量。
打包的目的有两个:一是让终端用户能够顺利安装软件包并正常运行,例如通过双击安装包或在终端输入命令启动程序。二是为了方便发布,打包后生成的文件可以简化为单一的二进制或源码压缩文件,便于托管或直接运行。pypi托管中心提供了开源Python项目库的托管服务,是发布包的重要平台。
源代码包文件通常包括README.md、LICENCE和setup.py(或setup.cfg、project.toml)三个文件。README.md概述了项目的基本信息,LICENCE为软件协议,setup.py是安装包的入口程序。setup.cfg和project.toml是描述性配置文件,分别提供更清晰的包配置信息和指定打包工具。
setup.py文件中的setup函数是核心,它接受多个参数,如包名称、版本、描述等。其中,name和version参数分别用于定义包的名称和版本号;description、author、author_email和url参数提供了软件包的功能描述和****;classifier用于详细描述软件功能和适用场景;licence参数指定了软件协议;install_requires参数用于列出依赖包及其版本。
setup.py的关键参数包括packages、package_dir、package_data和entry_points。packages用于列举包的位置,可以使用find_packages函数自动查找或手动列举包文件夹;package_dir定义了包文件夹与代码路径的映射关系;package_data用于指定需要包含的数据文件;entry_points则用于定义项目中的插件,实现动态加载。
本地安装包可以通过pip工具执行pip install .命令。若要将包发布到pypi托管网站,首先需注册用户并安装build和twine包。执行打包命令python setup.py sdist bdist_wheel生成源代码文件和wheel二进制文件,然后使用twine上传到pypi网站。成功发布后,用户可通过pip install mypackage命令安装包。
总之,setuptools作为强大的打包工具,其发展得益于相关项目的贡献,且其功能强大使得它成为Python项目打包的首选。通过合理的配置setup.py文件,可以实现高效的包安装和发布流程。同时,遵循pypi托管规则,有助于软件的广泛分发和使用。
python打包分发工具:setuptools
setuptools是Python打包与分发的利器,它简化了库的创建与分发过程,使得开发者能够通过简单的命令实现库的安装。
setuptools的前身是distutils,它提供了打包与分发的功能。setuptools的功能包括源码包和二进制包的创建。
源码包sdist是常见的压缩包形式,包含库的源码及一些静态文件。打包源码包主要使用setup.py,通过formats参数指定压缩格式。安装源码包可选择解压缩后安装或直接安装。
二进制包bdist以wheel形式存在,格式为.whl,无需编译,安装更快。打包与分发二进制包同样使用setup.py,通过formats参数指定格式。
setup.py是打包过程的核心,它控制了重要的配置信息。通过packages、include_package_data、exclude_package_data、package_data、data_files参数指定需要打包的文件。
setup.py参数packages用于指定需要打包的package,类型为list[str]。find_packages和find_namespace_packages函数可快速找到所有package。
include_package_data参数用于根据MANIFEST.in文件打包非源码文件。package_data参数直接指定非源码文件。
依赖包的安装与版本管理由setup函数的install_requires、setup_requires、tests_require和extras_require参数实现。
对于python版本限制,使用python_requires参数指定。
setup函数的entry_points和scripts参数用于生成命令行脚本。而C/C++扩展则通过python setup.py build_ext --inplace命令进行编译。
主要通过setup函数的ext_modules参数进行C/C++扩展的编译,setuptools.Extension类用于指定扩展参数。setuptools.Extension用define_macros和undef_macros参数定义或取消定义宏。
自定义命令行为是setuptools的高级特性,通过继承setuptools.command类来实现。需要通过cmdclass参数告知setuptools,该参数是一个字典,key为命令名,value为继承的类。