当前位置:   article > 正文

Python项目打包与部署(三):打包与部署的实际操作流程_python -m build

python -m build

其它章节

在实际项目开发过程中,标准化的项目打包与部署流程,对于开源项目,可以帮助你将项目发布到公共仓库,方便用户下载安装。对于商业项目,可以在云服务器上建立私有化PyPi Server, 实现在线发布, 提高部署效率。

Python项目的打包与部署流程

  1. 创建与配置项目
  2. 打包项目
  3. 上传项目至PyPi 或 私有化仓库
  4. 下载与安装项目

项目发布组件

在这里插入图片描述
打包后,会生成两种主要的发布组件(artifect)

  • 源文件包: 即python源文件,简写为 sdist ,包含.py, 资源文件,数据文件等
  • 二进制包, 编译后的二进制格式,通常为wheel 格式, 也可以将非python第3方库合并打包。其安装器是pip.

Python二进制包有两种格式:Wheel 与 Egg. 2004年setuptools引入了Egg格式,而2012年PEP 427引入了Wheel格式。Wheel目前被认为是Python的内置和二进制封装的标准。

3. 打包工具介绍

最老的python打包工具是 distutils , 使用 setup.py 做为配置文件。 后被 setuptools 工具取代,配置文件为pyproject.toml, 但同时也可使用setup.py做为配置文件。
其它的打包工具有:Poetry 工具。Pipenv, PDM

setuptools打包步骤
在这里插入图片描述

4. 打包步骤详解

本文使用官方推荐的打包工具 setuptools, 配置文件使用 pyproject.toml .

1) 安装setuptools

安装命令

pip install --upgrade setuptools
  • 1

更新build模块

pip install --upgrade build
  • 1

2) 基本使用方式

创建1个 pyproject.toml, 添加 build-system section 配置

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
  • 1
  • 2
  • 3

通常,还需要添加更多section 配置段, metadata, contents, dependencies, etc。 这些内容也可以包含在 setup.cfg文件里。

如 pyproject.toml

[project]
name = "mypackage"
version = "0.0.1"
dependencies = [
    "requests",
    'importlib-metadata; python_version<"3.8"',
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

setup.cfg

[metadata]
name = mypackage
version = 0.0.1

[options]
install_requires =
    requests
    importlib-metadata; python_version < "3.8"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3) 整理项目结构

可按如下结构组织项目文件

mypackage
├── pyproject.toml  
|   README.rst or README.md 
|   # LICENCE (properly chosen license information, e.g. MIT, BSD-3, GPL-3, MPL-2, etc...)
└── mypackage
    ├── __init__.py
    └── ... (other Python files)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4) 编译项目

在 pyproject.toml 所以目录下,运行打包命令,

py -m build
  • 1

此命令会自动搜索package 子目录, 生成sdist, wheel artifacts.

dist/
├── example_package_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl
└── example_package_YOUR_USERNAME_HERE-0.0.1.tar.gz
  • 1
  • 2
  • 3

其中: *.tar.gz 就是源文件包, .whl 是built distribution, 也就是编译后的二进制包。 安装时,pip优先安装 wheel 包。

指定源文件目录, 只生成sdist 包

python -m build --sdist source-directory
  • 1

商业项目,如果不需要发布源码,可以只生成 wheel 包,

python3 -m build --wheel source-tree-directory
  • 1

5) 上传包至PyPi

要注册同1个帐号

测试帐号地址: https://test.pypi.org/account/register/

上传文件,还需要token.

为了安全地上传您的项目,您需要一个PyPiI API令牌。可在https://test.pypi.org/manage/account/#api-tokens 网页创建,将“Scope"设置为“Entie Account”在复制并保存令牌之前,不要关闭页面——否则,将不会再看到该令牌

上传文件的工具是 twine , 安装命令如下

py -m pip install --upgrade twine
  • 1

在dist子目录下运行, 上传所有文件

py -m twine upload --repository testpypi dist/*
  • 1

上述命令运行后,会提示你输入username与password, username使用__token__, 对于password, 使用toke值 ,包括 pypi- 前缀

D:\workplace\python\guangda>python -m twine upload --repository testpypi dist/*
Uploading distributions to https://test.pypi.org/legacy/
Enter your username: peter
Enter your password:
Uploading face_push-0.0.1-py3-none-any.whl
100% ---------------------------------------- 18.6/18.6 kB • 00:00 • ?
Uploading face_push-0.0.1.tar.gz
100% ---------------------------------------- 17.5/17.5 kB • 00:00 • ?

View at:
https://test.pypi.org/project/face-push/0.0.1/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

上传完成后,验证

https://test.pypi.org/project/example_package

5. 下载与安装项目

建议,新增1个虚拟环境来验证。 查看安装是否成功

py -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package

py -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
  • 1
  • 2
  • 3

注意,TestPyPI 是测试时使用。

安装完成后, 导入包测试

from example_package import example
example.add_one(2)
  • 1
  • 2

熟悉以后,正式的PyPI帐号注册地址:

https://pypi.org

私有化部署 PyPI server, 可参考 pypiserver官方文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/505929?site
推荐阅读
相关标签
  

闽ICP备14008679号