【python系列】手把手教你在pypi发布自己的包-他人可pip下载

news2024/11/26 21:42:30

前言

最近在写一个接口执行引擎用作于接口自动化测试平台的核心。

看了挺多资料,做了挺多事情,学了挺多乱七八糟的知识,笔记记得乱糟糟的,以至于一直没有整理发文(啊其实我就是懒),各位见谅。

正文如下

目前该引擎可以通过pip直接下载,但内容我还在写,预计这个月会完成(大概也许可能可以。)

pypi发包坑其实挺多的,坑都是环境冲突上,所以我在末文会贴上我发包成功的环境依赖包,可以pip直接下载。

我想的是,做好这个引擎,之后可以直接通过下载好的三方包,使用命令行直接执行核心的接口请求,并返回响应的数据。

让引擎和平台完全独立,这样这个引擎既可以作为接口测试框架使用,也可以作为平台的执行体。从而不需要完完全全在平台里面写接口请求形成强关联。

pypi发包

文件目录:

mwjApiTest
 - mwjApiTest
    - core
    - utils
 	- manage.py
 - LICENSE
 - MANIFEST.in
 - readme.md
 - setup.py

准备工作

1. 安装打包依赖工具

setuotoolswheel 用来构建你的项目,一般都会随 Python 安装,但是还是检查一下:

python -m pip install --user --upgrade setuptools wheel

2. 安装上传工具

twine 用来上传你的包到 PyPi :

python -m pip install --user --upgrade twine

3. 注册PYPI官网个人用户

网址:https://pypi.org/account/register/

LICENSE

版权声明文件,一般告诉使用者可以在什么场景下使用,如果想详细了解,可访问 https://choosealicense.com 进行了解,此处不再详细展开,一般直接将以下文案复制至文件内即可

Copyright (c) 2021 The Python Packaging Authority
 
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

README.md

主要是用来对此次发行的包的详细说明,包括用法和注意事项等

MANIFEST.in

里面的内容是需要上传的文件

具体格式和参数参考https://docs.python.org/2/distutils/sourcedist.html

setup.py

import setuptools  # 导入setuptools打包工具

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

setuptools.setup(
    name="mwj-apitest",  # 用自己的名替换其中的YOUR_USERNAME_
    version="1.0.0",  # 包版本号,便于维护版本,保证每次发布都是版本都是唯一的
    author="梦无矶小仔",  # 作者,可以写自己的姓名
    author_email="Lvan826199@163.com",  # 作者联系方式,可写自己的邮箱地址
    description="A small example package",  # 包的简述
    long_description=long_description,  # 包的详细介绍,一般在README.md文件内
    long_description_content_type="text/markdown",
    url="https://github.com/Lvan826199/mwjApiTest",  # 自己项目地址,比如github的项目地址
    packages=setuptools.find_packages(),
    entry_points={
        "console_scripts" : ['mwjApiTest = mwjApiTest.manage:run']
    }, #安装成功后,在命令行输入mwjApiTest 就相当于执行了mwjApiTest.manage.py中的run了
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',  # 对python的最低版本要求
)

打包

打包前检查

通过这一步可以检查setup.py中是否有错误,例如版本号错误

python setup.py check

打包

python setup.py sdist bdist_wheel

image-20230531181812043

这两个文件是要上传到 PyPi 网站上供别人下载安装的。

发布前准备

在setup.py同级目录下创建.pypirc 文件,写入pypi账户密码,这样每次上传就不需要在重复输入了

[distutils]
index-servers =pypi

[pypi]
repository:https://upload.pypi.org/legacy/
username:username
password:password

本地测试

python setup.py install

安装成功后,可以通过上面定义的命令执行一次,如果成功证明安装成功,可以继续打包了

image-20230531175848217

注册(可直接跳过这个步骤)

上传前需要注册一下包的名称,因为这个名称必须独一无二,如被占用则注册不通过。

python setup.py register

遇到报错

Server response (410): Project pre-registration is no longer required or supported, upload your files instead.

根据官网:https://packaging.python.org/en/latest/guides/migrating-to-pypi-org/#uploading

找到官网提供的解决方案是跳过注册步骤,直接进入 上传项目。(真6)

image-20230531180458732

检查是否符合pypi要求

twine upload dist/*

image-20230531180643367

image-20230531180654160

上传

twine upload dist/*

报错:ImportError: cannot import name ‘appengine’ from ‘requests.packages.urllib3.contrib’

解决方案:

更新requests-toolbelt库

pip install --upgrade requests-toolbelt

1.升级 requests 库到较新版本。

请确保您正在使用 requests 的最新版本,最好是大于等于 2.21.0 版本。您可以使用以下命令升级您的 requests 库:

pip install --upgrade requests

2.更新 urllib3 库。

检查您的 urllib3 库是否是最新版本,最好是大于等于 1.24.2 版本。您可以使用以下命令升级 urllib3 库:

pip install --upgrade urllib3

3.使用 requests-toolbelt 库。

在某些情况下,使用 requests-toolbelt 库可能可以解决这个问题。requests-toolbelt 库是 requests 库的扩展,提供针对特定用例的功能扩展,并具有适用于 Google App Engine 的自定义适配器。您可以使用以下命令安装 requests-toolbelt 库:

pip install requests-toolbelt

然后,将您的代码中的 requests 导入语句替换为以下语句:

from requests_toolbelt.adapters import appengine as requests_adapters
import requests

requests.adapters = requests_adapters

这将使用 requests-toolbelt 提供的 App Engine 适配器来替换 requests 库自带的适配器。

上传成功

image-20230531183058576

后续版本更新

更新代码,并修改setup.py中的版本号,继续重复打包操作。(不需要注册步骤)

(旧文件还在的话记得删除)在dist文件夹下

第一步:更新代码

这个比较简单也比较基础,把经过测试的代码更新到package中的.py文件即可。我这个项目的package就是mwjApiTest。

第二步:更新版本号信息

打开setup.py文件,然后修改对应的信息,比如版本号等等。(版本号必须要改,不然上传会提示你重复了)

第三步:使用以下指令更新包体

python setup.py sdist bdist

第四步:使用以下指令把新包体上传到pypi服务器上(记得需要先把dist文件夹下的内容删干净)

twine upload dist/*

第五步:使用以下指令更新python中的包体

pip install --upgrade certimaker

我们看到以下命令行信息,说明包体已经更新了

别人下载自己的库

image-20230601110431403

本次依赖包环境

可以通过命令直接下载

pip install -r requirements.txt

在项目根目录新建一个requirements.txt,填入以下内容进行下载。

bleach==6.0.0
certifi==2023.5.7
charset-normalizer==3.1.0
docopt==0.6.2
docutils==0.20.1
Faker==17.0.0
idna==3.4
importlib-metadata==6.6.0
importlib-resources==5.12.0
jaraco.classes==3.2.3
jsonpath==0.82
keyring==23.13.1
Markdown==3.4.1
markdown-it-py==2.2.0
mdurl==0.1.2
more-itertools==9.1.0
pipreqs==0.4.13
pkginfo==1.9.6
pyasn1==0.4.8
Pygments==2.15.1
PyMySQL==1.0.2
python-dateutil==2.8.2
pywin32-ctypes==0.2.0
readme-renderer==37.3
requests==2.30.0
requests-toolbelt==1.0.0
rfc3986==2.0.0
rich==13.3.5
rsa==4.7.2
six==1.16.0
twine==4.0.2
typing-extensions==4.5.0
urllib3==2.0.2
webencodings==0.5.1
yarg==0.1.9
zipp==3.15.0

在这里插入图片描述

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

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

相关文章

openkylin安装git、openssh-server

openkylin安装成功之后是没有安装git的,故不能clone代码 也没有安装openssh-server,故不能使用finalshell等工具通过ssh登录 安装git和openssh-server 打开终端:桌面空白处,右键,点击打开终端 输入下面的命令&…

第九章 elasticsearch集群与商品搜索

1、支持复杂的查询; 2、ES从一出生就是为分布式、集群化而 生的,不仅方便横向扩展、动态增加节点 创建索引的时候,定义3个分片,每个分片1个副本集,一个就有6个分片 如图,不论我们有多少个es实例,当用户需要对es进行增删改查的时候,连接任何一台节点都行,es内部会进行…

linux 安装中文输入法

sudo apt-get install fcitx-googlepinyin

【PAT B 1010,1011】一元多项式求导 ,A+B和C

目录 1010 一元多项式求导 1011 AB 和 C 1010 一元多项式求导 设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不…

Spring拦截器入门案例讲解

1.拦截器的概念 拦截器是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。 作用 在指定的方法调用前后执行预先设定的代码阻止原始方法的执行 2.拦截器和过滤器的区别 归属不同:Filter属于Servlet技术,Interceptor属…

第二课:Figma 界面认识

创建文件 进入 Figma 后,可以查看最近浏览的内容,官方也推荐了一些基础的项目,点击右上角 Design file(设计文件)即可创建项目; 注:网页版和本地版界面样式布局一致。 创建画布 点击左上画框…

SpringBoot教学资料2-Hello SpringBoot!

Hello SpringBoot! springboot的启动 1.创建springboot项目。注意选择spring-boot-starter-parent版本。版本兼容适配问题请看下列。 springboot1.5.9以下兼容jdk1.7 springboot2.x.x版本兼容jdk1.8 springboot3.0及以上版本兼容jdk17 springboot2.1之后的版本已…

企业微信自建应用获取登录用户敏感信息,一键授权 (python篇,详细多图)

目录 收起 企业微信自建应用配置 自建应用 构造网页授权链接 请求用户信息 补充 ACCESS_TOKEN 企业微信自建应用配置 自建应用 新建应用 企业微信管理后台——>应用管理,拉到最下方,创建应用 创建应用 配置应用 在应用管理页面点击刚才创…

jmeter 性能测试用 csv,这个坑有些扯蛋

⏩很多人在使用 jmeter 做接口测试、自动化测试和性能测试时,都喜欢用 CSV 数据文件设置功能,来读取准备好的测试数据。虽然这种方法并不是最优方案,在我们的性能测试课程中,讲解了更优的方案,但是,没有上过…

阿里云国际站:在阿里云上做开发,究竟是一种怎样的体验?

标题:在阿里云上做开发,究竟是一种怎样的体验?   "在阿里云上做开发,到底是一种什么样的体验?"这是一个我经常被问到的问题,今天我决定与大家深度探讨这个话题。我们知道,任何对用户体验的描述…

面向对象七大设计原则

更多Java知识学习 文章目录 前言一、单一职责原则定义:优点:怎么应用? 二、开闭原则定义优点怎么应用? 三、依赖倒置原则定义优点怎么应用? 四、接口隔离原则定义优点怎么应用? 五、里氏替换原则定义继承的…

对标推特,Threads横空出世,最新Threads账号注册和登录保姆级教程

Meta 正式在全球超过 100 个国家地区应用商店上线 Threads,一款和 Twitter 高度相似的社交软件,并将其定位为 Instagram 的文字对话应用。 Meta 试图以 Threads 吸引那些因马斯克决策而离开了 Twitter 的用户。 在Threads帖文中,扎克伯格向所…

从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题

目录 1. 二叉搜索树(BinarySearchTree) 1.1 二叉搜索树的优势和劣势 二叉搜索树的时间复杂度:O(N) 1.2 二叉搜索树的改良 2. 二叉搜索树的实现 2.1 二叉搜索树的定义 2.2 二叉搜索树的插入 2.3 二叉搜索树的查找 2.4 二叉搜索树的删…

(汽车级)TMCS1101A3BQDRQ1、TMCS1101A3UQDRQ1隔离式霍尔效应电流传感器 6mA 8-SOIC

TMCS1101/TMCS1101-Q1精密隔离电流传感器是电隔离霍尔效应电流传感器&#xff0c;能够进行直流或交流电流测量&#xff0c;具有高精度、出色的线性度以及温度稳定性等特性。低漂移、温度补偿信号链在整个器件温度范围内具有<1.5%满量程误差。输入电流流经内部1.8mΩ导体&…

只需2行python代码,轻松将PDF转换成Word

1. pdf2docx功能 - 解析和创建页面布局- 页边距- 章节和分栏 (目前最多支持两栏布局)- 页眉和页脚 [TODO]- 解析和创建段落- OCR 文本 [TODO] - 水平&#xff08;从左到右&#xff09;或竖直&#xff08;自底向上&#xff09;方向文本- 字体样式例如字体、字号、粗/斜体、颜色…

什么是V2G充电技术?

据权威数据统计&#xff0c;截止2020年&#xff0c;我国纯电动汽车保有量已经达到400万辆。随着电动汽车保有量的快速增长&#xff0c;对电网会有一定的影响&#xff0c;电力容量需求增大&#xff0c;加剧用电峰谷差&#xff0c;对电网的冲击大&#xff0c;影响居民正常生活。这…

C#核心知识回顾——11.各数据集合的汇总区分、委托、事件

变量: 无符号 byte正8位 ushort正16位 uint正32位 ulong正64位 有符号 sbyte8位 short16位 int32位 long64位 浮点数 float double decimal 特殊 char bool string 复杂数据容器: 枚举enum 结构体struct 数组(一维、二维、交错) [] [,] [][] 类 数据集合&#xff1a;…

leetcode--杨辉三角(C、C++)

文章目录 1.C实现2.C实现 1.C实现 #include<stdio.h> #include<stdlib.h> #include<assert.h>int** generate(int n, int* rnum_row, int** rnum_row_ele) {//*rnum_row-->num_row&#xff1a;杨辉三角行数*rnum_row n;//*rnum_row_ele-->num_row_el…

深度学习笔记之Transformer(五) Position Embedding铺垫:Word2vec

深度学习笔记之Transformer——Position Embedding铺垫&#xff1a;Word2vec 引言回顾&#xff1a;关于词特征表示的 One-hot \text{One-hot} One-hot编码目标函数构建关于语料库与任务目标似然函数构建 Word2vec \text{Word2vec} Word2vec模型结构重点总结 引言 在Transforme…

Zabbix“专家坐诊”第198期问答汇总

问题一 Q&#xff1a;请问一下&#xff0c;自带的思科SNMP交换机模板&#xff0c;怎么不监控down的接口&#xff1f; A1&#xff1a;这种一般在自动发现规则里加个过滤器&#xff0c;过滤出IFSTATUS匹配(1|3)的就能实现只发现up的端口了。 A2&#xff1a; 在“Items”页面&a…