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

news2024/12/25 23:48:16

其它章节

  • Python项目打包与部署(一):模块与包的概念与关系
  • Python项目打包与部署(二): init.py的作用及内容
  • 各类Python项目的项目结构及代码组织最佳实践

在实际项目开发过程中,标准化的项目打包与部署流程,对于开源项目,可以帮助你将项目发布到公共仓库,方便用户下载安装。对于商业项目,可以在云服务器上建立私有化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

更新build模块

pip install --upgrade build

2) 基本使用方式

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

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

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

如 pyproject.toml

[project]
name = "mypackage"
version = "0.0.1"
dependencies = [
    "requests",
    'importlib-metadata; python_version<"3.8"',
]

setup.cfg

[metadata]
name = mypackage
version = 0.0.1

[options]
install_requires =
    requests
    importlib-metadata; python_version < "3.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)

4) 编译项目

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

py -m build

此命令会自动搜索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

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

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

python -m build --sdist source-directory

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

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

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

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

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

上述命令运行后,会提示你输入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/

上传完成后,验证

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

注意,TestPyPI 是测试时使用。

安装完成后, 导入包测试

from example_package import example
example.add_one(2)

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

https://pypi.org

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/994317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[移动通讯]【Carrier Aggregation-4】【LTE-2】

前言&#xff1a; 参考&#xff1a; 4G/LTE - LTE Advanced 参考&#xff1a; 《Carrier Aggregation Explained In 101 Seconds》 Qualcomm 《Carrier aggregation (CA) in LTE-Advanced by TELCOMA Global》 《Carrier Aggregation _CA_Part1》 《Carrier Aggregation _CA_Pa…

手动开发-简单的Spring基于XML配置的程序--源码解析

手动开发-简单的Spring基于XML配置的程序 文章目录 手动开发-简单的Spring基于XML配置的程序思路分析完整代码&&#xff1a; 本文带着大家写一个简单的Spring容器&#xff0c;通过读取beans.xml配置文件&#xff0c;获取第一个JavaBean&#xff1a;Monster的对象&#xff0…

光源控制器光源亮度调节操作说明

光源控制器光源亮度调节操作说明 光源亮度的调节在许多应用中都扮演着至关重要的角色&#xff0c;不仅影响图像质量&#xff0c;还能改善工作环境。下面是关于光源控制器光源亮度调节的详细操作步骤&#xff0c;帮助您轻松实现亮度的合适调整。 步骤一&#xff1a;登录系统 …

MySQL——常见问题

NULL和空值的区别 1、空值不占空间&#xff0c;NULL值占空间。当字段不为NULL时&#xff0c;也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时&#xff0c;只能查出字段中没有不为NULL的或者为 NULL 的&#xff0c;不能查出空值。 3、判断NULL 用IS NULL 或者 is no…

Bootstrap与响应式图片设计相关的类

01-图像随父元素的同步缩放 可以利用类 .img-fluid 实现图像随父元素同步缩放。 示例代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>图像的同步缩放</title><meta name"viewport&…

C/C++标准输入输出函数最全解析(含C/C++的输出控制符)

C/C标准输入输出函数最全解析&#xff08;含C/C的输出控制符&#xff09; 一、标准输入流1、C 标准输入1.1 标准输入流及对缓冲区的理解1.2 scanf()1.2.1 scanf()简介1.2.2 ANSI C中scanf()的转换说明1.2. 3 scanf()转换说明中的修饰符 1.3 gets() - 不建议1.4 fgets()1.5 fget…

【笔记】大模型时代下做科研的四个思路 - 论文精读·52

视频地址&#xff1a;大模型时代下做科研的四个思路 相关大模型 CV: ViT(22B) , ViT-G(2B) from google 多模态&#xff1a;ViT-E(4B) from google NLP&#xff1a;LLaMA(70B,130B,330B,651B) from Meta 提问&#xff1a;在模型越来越大的时代背景下&#xff0c;如何利用有限…

【接口测试】微信小程序接口自动化的实现方案

背景 前几天看到有人问微信小程序怎么进行接口自动化&#xff0c;所以想把自己如何进行微信小程序接口自动化的方法分享下。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html这是微信小程序的登陆流程&#xff0c;小程序登陆需要在小程序…

un-app-手机号授权登录-授权框弹不出情况

前言 手机号授权是获取用户信息api停用之后&#xff0c;经常使用的api。但是此api也是有很多坑 手机号授权会出现调用不起来的情况&#xff0c;这是因为小程序后台没有进行微信认证导致的 手机号授权调用不起来-没有微信认证 来到小程序后台-设置-基本设置-下拉找到微信认证…

【ModelSim】查看波形图(Wave)和数据流图(DataFlow),以4-bit计数器为例

▚ 00 预备条件 &#x1f4e2; 本项目包括两个Verilog文件&#xff1a;测试文件counter.v和激励文件testbench.v&#xff1b;可从此处点击HERE获取。 &#x1f3ae; Windows10系统 &#x1f52e; ModelSim SE-64 2020.4 ▚ 01 启动ModelSim 有两种方式可以打开ModelSim&a…

vue下载与部分指令详解

目录 vue 下载地址 前端框架 MVC与MVVM框架 Vue使用 Vue.js指令 ​编辑 v-if v-else v-show v-on v-model&#xff08;表单绑定&#xff09; v-bind v-for v-text v-model 指令扩展 vue 下载地址 官方入门&#xff1a;https://cn.vuejs.org/ API 文档&#…

如何给网站或者后端服务免费且快速的进行配置HTTPS,配置ssl证书

前言 现在部署的网站用的大多都是https协议的,还有的平台你要是想发布自己的网站就必须得是https的协议,如果不使用ssl的话,那就不让你使用.就比如微信,支付宝等的产品,不用的话就不让你使用他们的平台.不过还好很多服务厂商都提供了免费ssl证书可以进行配置 今天的情况比较特殊…

常用电子元器件基础知识

目录 一、电阻 二、电容 三、电感 四、保险丝 五、二极管 一、电阻 概念&#xff1a;顾名思义&#xff0c;就是增加电流通过的阻力的。 就像是在水渠中放入东西&#xff0c;能阻止水的顺利通过也是一个道理。 基于电阻的电气特性&#xff0c;电阻在电路中主要有以下四个…

Solidity 小白教程:11. 构造函数和修饰器

Solidity 小白教程&#xff1a;11. 构造函数和修饰器 这一讲&#xff0c;我们将用合约权限控制&#xff08;Ownable&#xff09;的例子介绍solidity语言中构造函数&#xff08;constructor&#xff09;和独有的修饰器&#xff08;modifier&#xff09;。 构造函数 构造函数&…

栈与队列(JAVA)

单调栈&#xff1a; 下一个更大元素。 题目意思如图所示&#xff1a; 单调栈图解&#xff1a; class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer>stacknew Stack<>();int res[]new int[nums2.length];int ans[]new int…

为什么要使用Token

传统的session认证 我们知道&#xff0c;http协议是一种无状态的协议&#xff0c;这就意味着当用户向我们的应用提供了用户名和密码进行用户认证&#xff0c;那么在下一次登录的时候&#xff0c;用户还要再进行验证&#xff0c;因为根据http协议&#xff0c;浏览器并不知道是谁…

Shipping mode --为省电而生

关于shipping mode 相信很多做消费类电子产品的硬件工程师对这对英文耳熟能详。日常家用的手机&#xff0c;电脑&#xff0c;电子手表都用到了这项技术。 shipping mode可译为运输模式&#xff0c;又或者船运模式&#xff0c;其技术的实现主要依靠于电子产品中的充电管理芯片。…

Java自学网站推荐--全网最靠谱

原文网址&#xff1a;Java自学网站推荐--全网最靠谱_IT利刃出鞘的博客-CSDN博客 简介 网上有各种Java学习网站&#xff0c;本文推荐的这个Java网站全网最靠谱&#xff0c;质量远超其他所有网站。 这个网站是&#xff1a;自学精灵&#xff0c;这是全网最强的Java学习网站&…

SpringBootWeb请求-响应

HTTP请求 前后端分离 在这种模式下&#xff0c;前端技术人员基于"接口文档"&#xff0c;开发前端程序&#xff1b;后端技术人员也基于"接口文档"&#xff0c;开发后端程序。 由于前后端分离&#xff0c;对我们后端技术人员来讲&#xff0c;在开发过程中&a…

机器学习算法详解2:线性回归

机器学习算法详解2&#xff1a;线性回归 前言 ​ 本系列主要对机器学习上算法的原理进行解读&#xff0c;给大家分享一下我的观点和总结。 本篇前言 ​ 本篇对线性回归的算法原理进行解读。 目录结构 文章目录 机器学习算法详解2&#xff1a;线性回归1. 引子2. 原理3. 特点4. 问…