打包项目上传到PyPI

319 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第33天,点击查看活动详情

大家好~我是小方,欢迎大家关注笋货测试笔记体完记得俾个like

背景

之前分享的dubbo接口测试工具,需要起个后端服务,以接口的形式进行测试dubbo接口,但是部署服务需要服务器资源,部分公司服务器资源不足,为此,将之前的dubbo接口测试工具打包成一个包,直接python代码调用即可~

创建项目

  1. 目录结构
.
├── LICENSE
├── README.md
├── dubborequests
│   ├── __init__.py
│   ├── api.py
│   ├── config.py
│   └── util.py
└── setup.py
  1. README.md

关于项目的描述文件,大概内容就是怎么安装,怎么使用

  1. LICENSE

开源License,如MIT,Apache license 2.0等等,这里我选择了MIT。关于使用说明可参考:Choose an open source license 一般GitHub创建仓库可以进行选择LICENSE

4. setup.py

用来描述项目,打包的时候用到这个文件。里面描述写着项目名字,项目版本,依赖哪些库,支持的Python版本,支持的操作系统

import setuptools

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

setuptools.setup(
    name="dubborequests",
    version="0.3",
    author="fang",
    author_email="664616581@qq.com",
    description="Telnet command test dubbo",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/JokerChat/dubbo_requests",
    packages=setuptools.find_packages(),
    python_requires='>=3.7.0',
    install_requires=['kazoo'],
    license='MIT',
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)
  • name 项目(命名项目时, 要看看PyPi是否存在同名的项目)
  • version 项目的版本号, 后续代码改动了, 需要更新版本号, PyPi只允许一个版本存在
  • author 作者名
  • author_email 邮箱地址
  • description 项目的简短描述信息
  • long_description 项目的详细描述信息, 会显示在PyPi项目描述页面
  • long_description_content_type 用于指定long_description的标记类型,上面的例子是markdown
  • url 一般是项目的仓库地址
  • packages 指定最终发布的包中要包含的packages。上面的setuptools.find_packages()会自动搜索项目根目录下的所有packages
  • install_requires 项目依赖于哪些库, 这些库都会在pip install时自动安装
  • license 选择的开源License类型
  • classifiers 其他信息,一般包括项目支持的Python版本,License,支持的操作系统

打包项目

  1. 打包项目需要安装setuptools和wheel
pip install setuptools
pip install wheel
  1. 运行下面的命令打包
python setup.py sdist bdist_wheel
# 稳妥起见, 直接使用python3 
python3 setup.py sdist bdist_wheel

这里有个坑, 要看下你本地python指向2还是3, 如果用了python2来打包, 打包出来的whl包无法安装在python3里

  1. 打包成功 打包成功后, 项目底下会生成这几个目录 dist目录下会存在tar.gz的源码包和xxx.whl的Wheel包。

  2. 验证是否能安装

 pip install dist/dubborequests-0.3-py3-none-any.whl

  1. 测试包功能
# 导入
import dubborequests
from dubborequests.config import Config
Config.zookeeper_url_list = ['192.168.240.15:2181', '192.168.240.15:2182', '192.168.240.15:2183']
# 获取dubbo服务详情
data = dubborequests.search('cn.com.xxx.sso.ehr.api.dubbo.SsoEmpInfoService')
# 详细示例可以看README.md

发布项目到PyPI

  1. 先在PyPI注册用户pypi register

  2. 使用twine上传项目, 先安装twine

pip install twine
  1. 执行命令将打包好的库上传
twine upload dist/*

  1. 上传成功后PyPI即可看到项目文档 dubborequests

可能存在的踩坑点

  1. pip install dubborequests无法找到这个库

解决:

pip install dubborequests -i https://pypi.org/simple

原因:国内镜像地址暂未同步该库

  1. 重复上传

这里原因是重复上传了同一个库了, 如果确实需要上传, setup.py 更新一下版本号即可

  1. 项目名重名无法上传
# 截取了知乎的某一段, https://zhuanlan.zhihu.com/p/106166278
HTTPError: 403 Client Error: The credential associated with user 'jinhang' isn't allowed to upload to project 'pypi'. See https://pypi.org/help/#project-name for more information. for url: https://upload.pypi.org/legacy/

这个没遇到过, 原因是跟别人的项目名重复, setup.py 改一下项目名即可

总结

从创建到发布搞了一个晚上, 第一次发布踩坑还是挺多的。水了那么多, 大家快来看看我的新项目啦~ dubborequests