当前位置:   article > 正文

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

pypi

前言

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

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

正文如下

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

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

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

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

pypi发包

文件目录:

mwjApiTest
 - mwjApiTest
    - core
    - utils
 	- manage.py
 - LICENSE
 - MANIFEST.in
 - readme.md
 - setup.py
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

准备工作

1. 安装打包依赖工具

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

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

2. 安装上传工具

twine 用来上传你的包到 PyPi

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

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.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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的最低版本要求
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

打包

打包前检查

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

python setup.py check
  • 1

打包

python setup.py sdist bdist_wheel
  • 1

image-20230531181812043

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

发布前准备

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

[distutils]
index-servers =pypi

[pypi]
repository:https://upload.pypi.org/legacy/
username:username
password:password
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

本地测试

python setup.py install
  • 1

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

image-20230531175848217

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

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

python setup.py register
  • 1

遇到报错

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

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

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

image-20230531180458732

检查是否符合pypi要求

twine upload dist/*
  • 1

image-20230531180643367

image-20230531180654160

上传

twine upload dist/*
  • 1

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

解决方案:

更新requests-toolbelt库

pip install --upgrade requests-toolbelt
  • 1

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

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

pip install --upgrade requests
  • 1

2.更新 urllib3 库。

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

pip install --upgrade urllib3
  • 1

3.使用 requests-toolbelt 库。

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

pip install requests-toolbelt
  • 1

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

from requests_toolbelt.adapters import appengine as requests_adapters
import requests

requests.adapters = requests_adapters
  • 1
  • 2
  • 3
  • 4

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

上传成功

image-20230531183058576

后续版本更新

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

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

第一步:更新代码

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

第二步:更新版本号信息

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

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

更新前最好检查一遍:

python setup.py check
  • 1
python setup.py sdist bdist_wheel
  • 1

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

上传前也最好检查一遍

twine check dist/*
  • 1

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

twine upload dist/*
  • 1

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

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

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

pip install --upgrade mwj-apitest
  • 1

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

别人下载自己的库

image-20230601110431403

本次依赖包环境

可以通过命令直接下载

pip install -r requirements.txt
  • 1

在项目根目录新建一个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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述

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

闽ICP备14008679号