51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

将自己的 python 包添加到 pip 源 Pypi

python 公用的包可以使用 pip 管理工具方便地下载、使用、管理,那么如何将自己的工具包上传到 pip 服务器供别人下载呢,本记录相关内容。

简介 {#简介}

python 包可以使用 pip 工具方便地管理,分享和使用。

  • 使用python包模块有很多好处:
  1. 可以使用pip之类的命令来管理和安装python模块,避免手动管理引用文件。
  2. 方便共享我们的python包。
  3. 在一个模块中可以添加文档。
  4. 在python包与包之间有很多的相互依赖,引入包模块可以预先加载所有需要的包,避免由于模块之间依赖造成的问题。

pip 源初始的形态,我们希望把自己的包也上传到这里。

创建自己的 python 包 {#创建自己的-python-包}

先置条件 {#先置条件}

要把自己的包发布到pip上,需要满足以下几个条件:

  • 目录下的所有文件名均为英文小写
  • 不包含下划线,空格和特殊字符(支持中划线,但也不建议使用)
  • 选定的包名在 pypi 网站上没有使用过,可以访问官网,搜索一下想用的名字有没有被占用。

包结构 {#包结构}

我们的包名称为 utils-vvd(示例)

  • 需要在包最外层目录创建 setup.py 文件,用于打包和发布

  • setup.py 文件内容

  • 其中 packages

  • 参数说明

    | 参数 | 说明 | |----------------------|------------------------------------------------------------------------------| | version | 包发布版本 | | description | 描述信息,会在 pip show 中展示 | | url | 个人相关链接(不重要) | | author | 作者 | | author_email | 作者邮箱 | | license | 许可 | | packages | 表示需要打包的名单,惯例是使用 setuptoolsfind_package 工具收集目录中含有 __init__.py 文件的文件夹 | | zip_safe | 是否使用 zip 压缩 | | include_package_data | 接受 MANIFEST.in 匹配的所有数据文件和目录。 | | install_requires | 重要包的相关依赖,在安装该包之前会检查列表中的依赖项并自动安装 | | python_requires | python 版本需求 |

pypi 打包非 py 文件 {#pypi-打包非-py-文件}

  • 可以在 pypi 包中打包非 py 文件,需要在 setup.py 文件中额外指定
  • 建立 config 对象,使用 add_data_files 函数添加文件路径
  • 示例 setup.sh

pypi 账号 {#pypi-账号}

  • 进入官网创建账号 https://pypi.org/

  • 在家目录创建文件

    • Linux : ~/.pypirc
    • Windows: C:\Users\Username\.pypirc
  • 文件内容:

用户名和密码就是上一步骤所创建的,直接明文输入。如果你觉得明文密码不安全也可以留空,在后面的上传过程中会提示你手动输入。

当前 Pypi 强制要求 2FA 验证方式,不再支持账户密码上传包,需要用户在开通 2FA 验证后使用 API Token

之后 用户名为 __token__ 密码为 <token_value>

发布 python 包 {#发布-python-包}

  • 在命令行中切换到当前目录,输入:

会在当前目录生成 dist 文件夹

  • 你可以任选以下两种方式之一发布你的轮子。

    1. 使用命令:python setup.py sdist upload,还是和上面一样,简单但有安全隐患,目前已淘汰
    2. 使用 twinetwine upload dist/*

    安装 twine :

生成 whl 包 {#生成-whl-包}

  • 安装 whell升级 setuptools
  • 执行命令
  • dist 文件夹中会生成 whl 包
  • 可以 pip install xxx.whl 直接安装

管理你的包 {#管理你的包}

如果你的包已经上传成功,那么当你登录PyPI网站后应该能在右侧导航栏看到管理入口。

分享包 {#分享包}

  • 现在链接互联网的人讲道理可以使用如下命令来安装我们的包

但是会有一些问题,在国内一般都会换成阿里、清华、中科大等pip源,使用这些默认源无法下载到我们的包

需要手动指定 pypi 源才可以正确下载:

然后过几天,常用的镜像就会把你的包同步进去,就可以不用指定官方项目地址安装包了

可能遇到的错误 {#可能遇到的错误}

  • Upload failed (403): Invalid or non-existent authentication information.
    错误的用户验证信息,你需要创建一个用户验证文件 ~/.pypirc。请参阅上文。

  • Upload failed (403): You are not allowed to edit 'xxx' package information
    你需要先注册你的包才可以开始上传,运行注册命令:python setup.py register

  • Server response (401): Incomplete registration; check your email
    你的PyPI账户还没完成邮箱验证,你需要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。

  • Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"
    你的setup.py文件中的classifier信息有误,请按官网的正确分类书写classifier.

  • error: No dist file created in earlier command
    你还没打包就开始了上传命令,建议打包和上传的操作放在一起做,比如:

  • python setup sdist upload
    error: Upload failed (499): Client Disconnected
    这应该是网络问题,多重试几次。

  • Upload failed (400): File already exists
    文件已经存在了,你每一次上次都应该更新版本号。

  • colorama\ansitowin32.py line 59, in closed return stream.closed

    解决方案

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/coding/python/create-my-pip-package/create-my-pip-package/

赞(0)
未经允许不得转载:工具盒子 » 将自己的 python 包添加到 pip 源 Pypi