首页 > 编程语言 >【python系列】手把手教你在pypi发布自己的包-他人可pip下载

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

时间:2023-08-03 19:33:39浏览次数:36  
标签:python setup py pypi pip requests


前言

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

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

正文如下

目前该引擎可以通过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="[email protected]",  # 作者联系方式,可写自己的邮箱地址
    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

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

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

发布前准备

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

[distutils]
index-servers =pypi

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

本地测试

python setup.py install

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

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

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

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

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)

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

检查是否符合pypi要求

twine upload dist/*

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

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

上传

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 库自带的适配器。

上传成功

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

后续版本更新

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

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

第一步:更新代码

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

第二步:更新版本号信息

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

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

更新前最好检查一遍:

python setup.py check
python setup.py sdist bdist_wheel

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

上传前也最好检查一遍

twine check dist/*

检查显示PASSED字样表示无误。可以继续后续操作。

twine upload dist/*

上面这条如果报错,那就指定dist下的tar.gz文件

twine upload --verbose dist/*
#可以查看报错的详细信息

第五步:使用以下指令更新python中的包体(本地sitepackage)

pip install --upgrade mwj-apitest

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

别人下载自己的库

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

本次依赖包环境

可以通过命令直接下载

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

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


标签:python,setup,py,pypi,pip,requests
From: https://blog.51cto.com/u_15800928/6952312

相关文章

  • 自动生成python程序调用关系逻辑图
    前言你是否因为看一个程序或者运行一个框架,不知道他的运行流程?自己想写一个运行流程却觉得麻烦无从下手?graphviz+pycallgraph帮你绘制让领导看了都拍桌子称赞你的python程序逻辑调用关系图!先来看一下我这段时间在写的一个框架的部分流程吧~密密麻麻,真的哈人,完整的更哈人。狗看了都......
  • python-windows命令行启动appium及杀掉对应接口进程
    文章目录windows命令行启动appium及杀掉对应接口进程一.环境配置1.安装命令行版appium2.安装appium-doctor检测3.python安装Appium-Python-Client:4.定位uiautomatorviewer.bat5.查看主包名主类名Activity二.python-appium启动app1.appium启动一加计算器相关参数:2.windows查看端口......
  • python面试题
    基础篇1.为什么学习PythonPython语言简单易懂,上手容易,随着AI风潮,越来越火2.解释型和编译型语言的区别编译型语言:把做好的源程序全部编译成二进制的可运行程序。然后,可直接运行这个程序。如:C,C++解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!如:Python,(Java有些......
  • python中的注释noqa: F401
    在Python中,"noqa:F401"是一个特殊的注释指示。它主要用于在静态代码检查工具(例如Flake8)运行时,告知工具忽略特定的"F401"错误。"F401"是Flake8静态代码检查工具中的一种错误代码。具体来说,它表示"moduleimportedbutunused",即导入了模块但未在代码中使用。通常情况下,代......
  • Python 导出传感器数据到 .csv 文件
    导出传感器的数据一共分为两步:构建数据结构;导出数据到.csv文件。1.构建数据结构一般来说,传感器采集的数据为时间序列数据。需要导出的数据一般为:times=[t1,t2,t3...tn]value_A=[a1,a2,a3...an]value_B=[b1,b2,b3...bn]value_C=[c1,c2,c3...cn......
  • 快餐数据分析--Python数据分析实例
    1、读取数据importpandasaspddf=pd.read_csv('快餐数据.tsv',sep='\t')print(df)2、查看基本信息查看前五条数据df.head()查看整体信息df.info()可以看到,一共有4622条数据,只有choice_description列有缺失值,item_price为object类型是因为价格前面有$符号。打印列名......
  • Python绘制多种形式的条形图(柱状图)
    绘图前的准备因为涉及到中文显示,所以需要用两行代码解决中文乱码问题importnumpyasnpfrommatplotlibimportpyplotaspltplt.rcParams['font.sans-serif']=[u'SimHei']#SimHei就是中文字体#因为设置了中文后,负号就乱码了,所以还要设置负号的编码plt.rcParams['axes.......
  • python3.13是否移除了GIL的限制
     近日看到新闻:https://baijiahao.baidu.com/s?id=1773013936355276204&wfr=spider&for=pchttps://www.thepaper.cn/newsDetail_forward_24052522?commTag=true         ==================================================  乍一看好像说的是Pytho......
  • 接口相似数据结构复用率高?Apipost这招搞定!
    在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。为了解决这个问题,Apipost推出了数据模型板块。用户可以预先创建多个数据模型,并在API设计过......
  • Ubuntu 更新后出现多个 Python 版本
    电脑本来只有一个Python3.10,可能是由于系统升级的原因,发现电脑多了一个Python3.11版本,这带来了好多麻烦,比如我很多软件包都安装在python3.10中,但是命令行输入pip调用的是python3.11的,并且之前创建的虚拟环境感觉也不太正常了。我决定删除旧版本Pythonpython3.10-m......