python模块打包上传pypi-演示pytest hook函数二次开发

python模块打包上传pypi

pytest hook函数二次开发 修改默认编码 显示中文用例名称

官方文档 : https://packaging.python.org/en/latest/tutorials/packaging-projects/

1. pypi注册

先在pypi.org上注册账户密码 地址: www.pypi.org


模块尽量都保存在包中,如果要进行模块的定义,首先定义的就是包,
所以每个目录下需要一个__init__.py的文件,可以为空内容,但必须有。

项目的根目录,保存所有的项目代码
	程序执行文件,main.py,移动程序
	setup.py,打包及其信息说明
		【包】包名,从此处开始到末尾,统称为模块
			__init__.py
			【包】包名
				__init__.py
				【包】包名
					__init__.py
					源文件名.py

打包项目构成
源码包
setup.py
测试包

整体结构
在这里插入图片描述

2.setup.py模板

from setuptools import setup,find_packages

setup(
    name='pytest_encode',
    url='https://github.com/xxx/pytest-encode',
    version='1.0',
    author="xixi",
    author_email='dasun@qq.com',
    description='set your encoding and logger',
    long_description='Show Chinese for your mark.parametrize(). Define logger variable for getting your log',
    classifiers=[# 分类索引 ,pip 对所属包的分类
        'Framework :: Pytest',
        'Programming Language :: Python',
        'Topic :: Software Development :: Testing',
        'Programming Language :: Python :: 3.8',
    ],
    license='proprietary',
    packages = find_packages(), #['pytest_encode'],
    keywords=[
        'pytest', 'py.test', 'pytest_encode',
    ],

    # 需要安装的依赖
    install_requires=[
        'pytest'
    ],
    # 入口模块 或者入口函数
    entry_points={
        'pytest11': [
            'pytest_encode = pytest_encode.main',
        ]
    },
    zip_safe=False
)

name 就是包名
version 包的版本号
packages 可引入的包的名字,也可以使用setuptools.find_packages()去自动导入,我这里就一个包,所以直接写了
LICENSE 许可证,详细信息可以去官网查看

3.main.py

'''
@File : main.py
@Time : 2022/2/12
@Author: sunda
@Software: PyCharm
'''
#收集完测试用例 之后被调用的hook函数
# pytest_collection_modifyitems 修改默认编码  显示中文用例名称
from typing import List


def pytest_collection_modifyitems(
    session: "Session", config: "Config", items: List["Item"]
) -> None:
    print(items)
    #name 用例名字
    #nodeid 测试用例路径
    for item in items:
        item.name = item.name.encode('utf-8').decode('unicode-escape')
        item._nodeid= item.nodeid.encode('utf-8').decode('unicode-escape')

4.test


import pytest

@pytest.mark.parametrize("x,y,z",[[1,2,3],[2,2,4],[2,2,5]])
def test_bar1(x,y,z):
    assert x+y==z

@pytest.mark.parametrize("name",['小米','小明'],ids=['名称1','名称2'])
def test_bar2(name):
    print(f"{name}")
    assert True

直接运行结果
在这里插入图片描述

打包命令

依赖包安装
pip install setuptools python的包管理工具 负责安装和发布 尤其是安装拥有依赖关系的包
pip install wheel 生成 *.whl格式的安装包 本质上也是一个压缩包

打包命令
python setup.py sdist bdist_wheel

打包完成结构
在这里插入图片描述
本地直接安装 打包完成后的库
选择dist下的whl文件
在这里插入图片描述
执行 pip install **.whl
此时打包好的库成功下载
在这里插入图片描述
再次运行 test
在这里插入图片描述

发布pypi

发布pypi有两种选择
一种是 upload.pypi.org 直接上传到pypi
一种是 test.pypi

https://upload.pypi.org/legacy/ or https://test.pypi.org/legacy/

pypi.org上注册账户密码 地址: www.pypi.org
或者
在 TestPyPI 上注册一个帐户,这是一个用于测试和实验的包索引的单独实例
要注册帐户,请转到 https://test.pypi.org/account/register/并完成该页面上的步骤

上传时都需生成token进行上传

举例
登录 TestPyPI 生成一个token,
在这里插入图片描述

下载依赖
Unix/macOS

python3 -m pip install --upgrade twine  下载twine依赖
python3 -m twine upload --repository testpypi dist/*  上传

win

py -m pip install --upgrade twine
py -m twine upload --repository testpypi dist/*
使用pypi  上传时将 --repository testpypi  更换为  --repository  pypi

此时 用户名输入 token_
密码输入 刚刚获取的token值
在这里插入图片描述

验证

登录testpipy

上传后,您的包应该可以在 TestPyPI 上查看;例如: https://test.pypi.org/project/example_package_YOUR_USERNAME_HERE

下载上传的库
py -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE

更新版本

更新版本也很简单,只需要修改setup.py下的version
然后重新生成档案,上传

python setup.py sdist bdist_wheel
py -m twine upload --repository testpypi dist/*

更新本地moudle版本

pip install --upgrade string2date

或者是先卸载,再安装

# 卸载
pip uninstall pytest-encode
# 安装
pip install pytest-encode

常见问题

这里上传可能会出现了几种问题,(我把坑踩完了) 1、出现twine不会被识别为内部或外部命令
解决:把C:\Users\myname\AppData\Roaming\Python\Python36\Scripts加入系统变量

2、HTTPError: 403 Forbidden from https://upload.pypi.org/legacy/
Invalid or non-existent authentication information. See https://pypi.org/help/#invalid-auth for more information.
用户密码错误

3、HTTPError: 400 Bad Request from https://upload.pypi.org/legacy/
User ‘xxx’ does not have a verified primary email address. Please add a verified primary email before attempting to upload to PyPI. See https://pypi.org/help/#verified-email for more information.
自己账号的主邮箱没有验证,看看自己邮箱有没有pypi发来的邮件

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值