前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【python系列】手把手教你在pypi发布自己的包-他人可pip下载

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

作者头像
梦无矶小仔
发布于 2023-08-03 05:48:53
发布于 2023-08-03 05:48:53
2K00
代码可运行
举报
运行总次数:0
代码可运行

前言

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

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

正文如下

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

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

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

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

pypi发包

文件目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mwjApiTest
 - mwjApiTest
    - core
    - utils
  - manage.py
 - LICENSE
 - MANIFEST.in
 - readme.md
 - setup.py

准备工作

1. 安装打包依赖工具

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m pip install --user --upgrade setuptools wheel

2. 安装上传工具

twine 用来上传你的包到 PyPi :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m pip install --user --upgrade twine

3. 注册PYPI官网个人用户

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

LICENSE

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中是否有错误,例如版本号错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python setup.py check

打包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python setup.py sdist bdist_wheel

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

发布前准备

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[distutils]
index-servers =pypi

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

本地测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python setup.py install

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python setup.py register

遇到报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

检查是否符合pypi要求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
twine upload dist/*

上传

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
twine upload dist/*

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

解决方案:

更新requests-toolbelt库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --upgrade requests-toolbelt

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --upgrade requests

2.更新 urllib3 库。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --upgrade urllib3

3.使用 requests-toolbelt 库。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install requests-toolbelt

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from requests_toolbelt.adapters import appengine as requests_adapters
import requests

requests.adapters = requests_adapters

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

「上传成功」

后续版本更新

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

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

第一步:更新代码

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

第二步:更新版本号信息

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python setup.py sdist bdist_wheel

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
twine upload dist/*

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --upgrade mwj-apitest

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

别人下载自己的库

本次依赖包环境

可以通过命令直接下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -r requirements.txt

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 梦无矶的测试开发之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
你还是从前那个少年没有一丝丝改变,可是你妈妈呢?
母亲节,是一个感谢母亲的节日。母亲们在这一天通常会收到礼物,康乃馨被视为献给母亲的花,而中国的母亲花是萱草花,又叫忘忧草。
陈学谦
2020/05/12
5670
母亲节来了送啥礼物好?全网数据告诉你!
深挚的母爱,无时无刻不在沐浴着儿女们。5月的第2个周日就是母亲节了,这是一个全世界感谢母亲的节日。这个节日最早出现在古希腊,而现代的母亲节起源于美国,现在我国也遍地开花了。
1480
2020/05/12
5780
母亲节是哪一天?一个公式直接算出来!
实际上,要计算每年母亲节的具体日期,在Excel里很简单,公式如下:
大海Power
2021/08/31
1.6K0
JCJC句子改写在线工具上线-202305
田春峰-JCJC错别字检测
2023/10/16
2340
JCJC句子改写在线工具上线-202305
口红?剃须刀?Python告诉你,刚过去的520,大家都在送什么礼物
【导语】:今天我们来聊一聊刚过去的520,大家买得最多的都是什么?Python技术部分请看第二部分。
CDA数据分析师
2020/05/26
5130
口红?剃须刀?Python告诉你,刚过去的520,大家都在送什么礼物
摸鱼捷径!5月三大节日,如何用乐享做趣味活动?
你浅浅的微笑,就像藏在初夏里的微风,不仅吹来了花香和生命的热度,还有对生活的热爱。 五月,夏意渐浓,劳动节、青年节、母亲节接踵而至,先来看看5月,有哪些重点节日值得提前关注: 劳动节 ►1 劳动节祝福 劳动最光荣,致敬平凡与伟大的劳动者,又怎能缺少节日祝福呢?通过乐享祝福功能,选择节日祝福模板,定时全员推送,准时送出专属节日暖心关怀,节日模板,有视频祝福和贺卡模板祝福两种形式哦 左右滑动,查看更多 ►2 劳动节拍照大赛“下班后的我” 结束上半年兢兢业业,2023首个小长假即将来袭~准备好
腾讯乐享
2023/04/29
4410
摸鱼捷径!5月三大节日,如何用乐享做趣味活动?
母亲节礼物准备好了吗?这里有份最简单,却最真挚的建议!
中国人的骨子里有一种含蓄。 我们常以为爱就是一种感觉,把它放在心里,润物细无声间就能浸润对方的心田。 其实爱更是一种行动,只有表达出来,对方才能明了。 今日,借着母亲节的契机,让我们感受下古人是如何把对母亲深深浅浅的爱,藏在字里行间的。 游子吟 唐·孟郊 慈母手中线,游子身上衣。 临行密密缝,意恐迟迟归。 谁言寸草心,报得三春晖。 ---- 感悟: 有谁敢说,子女像小草那样微弱的孝心,能够报答得了像春晖普泽的慈母恩情呢? 是啊,母亲的情似海深,她倾尽所有给予我们最好的一切,寸草又怎么报达得了春晖之
鹅老师
2020/06/10
4600
母亲节到了,大爱VR的你想给她送上一份怎样的礼物呢?
每年五月的第二个星期日,我们在这一天里为妈妈送上最真挚的祝福。作为最亲最爱的人,妈妈总是包容着我们的所有缺点,承受着我们给予的伤害,却在我们悲伤哭泣时为我们提供最安稳的港湾。 有时,我们会嫌弃妈妈太啰
VRPinea
2018/05/16
6750
明天母亲节,用这款小程序,给妈妈送一张贺卡吧!
现在,「知晓程序」就给你推荐一款贺卡小程序「小小贺卡」,快用它给母亲送上你最真挚的祝福吧。
知晓君
2018/08/01
1.2K0
明天母亲节,用这款小程序,给妈妈送一张贺卡吧!
夸克“深度搜索”来袭,高搜商AI开启“外挂”模式
今年,夸克AI超级框先后上新“AI相机(拍照问夸克)”和“深度搜索”,一个全新的AI超级入口已经出现,无论是日常问题还是复杂任务,都可以在夸克里得到准确、丰富的解决方案。
AIGC新知
2025/05/09
1010
夸克“深度搜索”来袭,高搜商AI开启“外挂”模式
【愚公系列】《高效使用DeepSeek》035-节日祝福创意
📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主!
愚公搬代码
2025/04/06
2040
QQ 的登录封面是怎么设计的?
用户量越多,产品登录封面的设计越难做,因为需要照顾到更多的人群。QQ是个多终端产品,在手机端和电脑端都有日登录数亿的用户。为QQ这样一艘巨舰做运营策划,压力,一定是有的。 运营节点的选择很重要,大家经常会在节日的日子里看到QQ的特别cover。节日的时候,大多数人的情绪和想法会无限趋近,作品更容易引起大家心中的共鸣。其次,是热点事件的随时关注和即时跟踪。第三个是一些系列性的策划,这些策划通常会有比较长的策划周期。 举2013年的一些例子和大家分享一下。 六一 细节中的关怀 世界或许复杂,梦想却依然简单。 在
腾讯大讲堂
2018/04/02
1.2K0
QQ 的登录封面是怎么设计的?
这个母亲节的礼物,我为你们准备好了!(内含福利)
明天就是母亲节了,你是否已经给你的麻麻准备了节日礼物呢?在这里菜鸟小白预祝天下的妈妈节日快乐,每天都过的开开心心。
菜鸟小白的学习分享
2021/05/13
4961
这个母亲节的礼物,我为你们准备好了!(内含福利)
母亲节祝福网页制作
杨校
2025/05/10
4120
母亲节祝福网页制作
超实用!2021运营日历发布,社区活跃就靠它!
节假日到来之前,其他岗位的同事: 运营的同事: 节假日对运营人来说,正是要做活动、搞气氛、追热点、促活跃的时候,也正是最忙碌的时候。 为了在新的一年里能成为一个优雅的运营,乐乐专门整理出了2021运营日历,让腾讯乐享的社区管理员和运营者提前把握全年运营节奏,轻松策划更多精彩活动,让社区更活跃! January 2021.01 忙碌指数: 1月初,开门红 元旦刚过,迈入2021年,对很多行业来说,正是进行开门红项目的时候,也是春节前最后的业务冲刺期。通过腾讯乐享,可以助力打造氛围、赋能销售前
腾讯乐享
2021/01/15
9760
今天,大家都在搜“爸爸”
今天是母亲节,首先祝天下所有麻麻们节日快乐! 今天是母亲节,没错,但是百度指数却告诉我,大家都在找爸爸! 关键词的去向居然不是妈妈、礼物、庆祝这种俗到我想都不用想的关键词,而是爸爸·······想必全
用户2025931
2018/06/19
6570
大数据分析公众号阅读量10万+文章标题里的秘密!
在微信公众号每天推送的文章汪洋里,有哪些文章可以突破十万+,登上热门榜,从此走上文生巅峰呢?
IT阅读排行榜
2018/08/14
2.1K0
大数据分析公众号阅读量10万+文章标题里的秘密!
大数据激活互联网女人经济
互联网由男人们一手构建而成。玛丽莎·梅耶尔、玛丽·米克尔、小龙女这样的巾帼英雄是异类。但是,现实生活中占据半边天的女人们则是支撑互联网经济的人。 女性繁荣互联网 女性闪购网站唯品会近日市值终于突破100亿美金,与360比肩,仅落后于百度、腾讯和京东;美妆电商聚美优品上市之后已连涨数日直逼40亿美金;转型女性垂直电商的蘑菇街估值已高达10亿美金。 支撑起这些财富故事的都是,女人。而现在的土豪,百度、腾讯和阿里也有相当大的一部分业务来自女人。视频网站、导购网站、文艺社区、大众点评、妈妈社区,太多互联网业务是由
罗超频道
2018/04/25
5120
节日福利 | 6 个圣诞相关的高质量数据集+算力
场景描述:又是一年一度的平安夜 + 圣诞节,除了苹果和圣诞树,还有什么新鲜花样吗?为了让 21 世纪 20 年代的最后一个圣诞节有所不同,超神经今天特地给大家带来了多个圣诞节相关数据集,还搭配免费算力福利,快来领取吧!
HyperAI超神经
2019/12/30
7380
节日福利 | 6 个圣诞相关的高质量数据集+算力
大数据时代就是女性的时代,不服来辩
很多男性和孩子,其实一直奇怪女性这种特殊的能力。比如小时候你刚进家门,妈妈就以狐疑的语气马上说:“刘志军,你今天是不是没考好?”。比如你刚看一眼手机,老婆就笑:“是不是又是隔壁二狗约你打游戏?”。再比如你刚刚关起门打电话,女朋友一会儿就哭了:“你是不是又背我出去找小三?”。
IT阅读排行榜
2018/08/16
4890
大数据时代就是女性的时代,不服来辩
推荐阅读
相关推荐
你还是从前那个少年没有一丝丝改变,可是你妈妈呢?
更多 >
LV.1
机械工业出版社新媒体运营
目录
  • 前言
  • 正文如下
  • pypi发包
    • 准备工作
      • 1. 安装打包依赖工具
      • 2. 安装上传工具
      • 3. 注册PYPI官网个人用户
    • LICENSE
    • README.md
    • MANIFEST.in
    • setup.py
    • 打包
      • 打包前检查
      • 打包
      • 发布前准备
      • 本地测试
    • 注册(可直接跳过这个步骤)
      • 检查是否符合pypi要求
    • 上传
    • 后续版本更新
      • 别人下载自己的库
    • 本次依赖包环境
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档