Python 库打包的格式包括 Wheel
和 Egg
。Egg
格式是由 setuptools 在 2004 年引入,而 Wheel 格式是由 PEP427 在 2012
年定义。setuptools使用也是非常简单,假设项目目录如下:
1 2 3 4 5 6 7 8 9 10 11
| scr |- pyflow |- __init__.py |- util |- logger.py |- model.py |- xx.pyd |- api |- ctp_future |- xx.dll |- xx.dll
|
scr
是项目根目录,pyflow
是包的根目录
使用 setuptools
,创建一个 setup.py
打包配置文件,放在项目根目录下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| from setuptools import setup, find_packages from src.pyflow import __version__
with open('README.md', encoding="utf8") as fp: LONG_DESCRIPTION = fp.read()
setup( name="pyflow", version=__version__, long_description=LONG_DESCRIPTION, long_description_content_type='text/markdown', packages=find_packages("src"), package_dir={"": "src"}, include_package_data=True, package_data={'': ['model/*.pyd', 'api/ctp_future/*.*', 'api/ctp_spot/*.*']} )
|
注意使用package_data
命令将*.py
之外的文件同时打包。
1
| package_data={'': ['model/*.pyd', 'api/ctp_future/*.*', 'api/ctp_spot/*.*']}
|
设置完成之后就可以进行打包了
1 2 3 4 5 6 7 8 9
| python setup.py sdist
pip install wheel python setup.py bdist_wheel
pip install <path-to-package>
|
setuptools
通常使用setup.cfg
文件来进行具体的设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| [metadata] ;name:包名称 ;version:包版本 ;url:主页地址 ;project_urls:包相关网页地址,字典格式,对应关系见下图 ;author:作者名字 ;author_email:作者邮箱 ;maintainer:维护者名字 ;maintainer_email:维护者邮箱 ;classifiers:分类信息 ;license:使用的开源许可 ;description:简短描述 ;long_description:详细描述 ;long_description_content_type:详细描述的格式 ;keywords:关键词 ;platforms:支持的操作系统 ;long_description = file: README.md ;long_description_content_type = text/markdown ; PyPI的分类,类似于标签,所有条目见 https://pypi.org/pypi?%3Aaction=list_classifiers
name = pyflow ;version = 0.0.1 author = 稻草人 author_email = dybeta2021@163.com maintainer = 稻草人 maintainer_email = dybeta2021@163.com url = https://dybeta2021.github.io/ license = BSD-3-Clause description = flow-lib, a simple platform classifiers = License :: OSI Approved :: GNU General Public License v3 (GPLv3) Topic :: Software Development :: User Interfaces Environment :: Win32 (MS Windows) Operating System :: Microsoft :: Windows :: Windows 10 Programming Language :: Python :: 3.8
[options] ;依赖信息 ;install_requires:依赖的其他库列表,安装该库之前也会安装 ;extras_require:其他的可选依赖库,安装该库不会自动安装 ;setup_requires:构建依赖的库,不会安装到解释器库,安装到本地临时目录 ;python_requires:Python 版本依赖 ;use_2to3:布尔值,True 则自动将 Python2 的代码转换为 Python3 ;packages = find:
python_requires = ==3.8.* ;依赖install_requires,pip安装时靠的就是这个而不是requirements.txt install_requires = plotly==4.14.3 zip_safe = False
;功能管理 ;packages:该库包含的 Python 包 ;package_dir:字典配置包的目录 ;package_data:配置包的其他数据文件 ;include_package_data:布尔值,为 True 则根据 MANIFEST.in 文件自动引入数据文件 ;exclude_package_data:字典配置需要移除的数据文件 ;zip_safe:布尔值,表明这个库能否安全的使用 zip 安装和执行 ;entry_points:库的入口点配置,可用来做命令行工具和插件
|
setup
函数常用的参数如下:
version |
包版本 |
author |
程序的作者 |
author_email |
程序的作者的邮箱地址 |
maintainer |
维护者 |
maintainer_email |
维护者的邮箱地址 |
url |
程序的官网地址 |
license |
程序的授权信息 |
description |
程序的简单描述 |
long_description |
程序的详细描述 |
platforms |
程序适用的软件平台列表 |
classifiers |
程序的所属分类列表 |
keywords |
程序的关键字列表 |
packages |
需要处理的包目录(通常为包含 __init__.py 的文件夹) |
py_modules |
需要打包的 Python 单文件列表 |
download_url |
程序的下载地址 |
cmdclass |
添加自定义命令 |
package_data |
指定包内需要包含的数据文件 |
include_package_data |
自动包含包内所有受版本控制(cvs/svn/git)的数据文件 |
exclude_package_data |
当 include_package_data 为 True 时该选项用于排除部分文件 |
data_files |
打包时需要打包的数据文件,如图片,配置文件等 |
ext_modules |
指定扩展模块 |
scripts |
指定可执行脚本,安装时脚本会被安装到系统 PATH 路径下 |
package_dir |
指定哪些目录下的文件被映射到哪个源码包 |
requires |
指定依赖的其他包 |
provides |
指定可以为哪些模块提供依赖 |
install_requires |
安装时需要安装的依赖包 |
entry_points |
动态发现服务和插件,下面详细讲 |
setup_requires |
指定运行 setup.py 文件本身所依赖的包 |
dependency_links |
指定依赖包的下载地址 |
extras_require |
当前包的高级/额外特性需要依赖的分发包 |
zip_safe |
不压缩包,而是以目录的形式安装 |