前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将自己的 python 包添加到 pip 源 Pypi

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

作者头像
为为为什么
发布2022-08-06 11:28:28
8680
发布2022-08-06 11:28:28
举报
文章被收录于专栏:又见苍岚又见苍岚

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

简介

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

  • 使用python包模块有很多好处:
  • 可以使用pip之类的命令来管理和安装python模块,避免手动管理引用文件。
  • 方便共享我们的python包。
  • 在一个模块中可以添加文档。
  • 在python包与包之间有很多的相互依赖,引入包模块可以预先加载所有需要的包,避免由于模块之间依赖造成的问题。
  • 核心的源服务器 The Python Package Index (PyPI)https://pypi.org/

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

创建自己的 python 包

先置条件

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

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

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

代码语言:javascript
复制
utils-vvd
	__init__.py
	core.py
setup.py

  • 需要在包最外层目录创建 setup.py 文件,用于打包和发布
  • setup.py 文件内容
代码语言:javascript
复制
from setuptools import setup, find_packages

str_version = '1.0.31'

setup(name='utils-vvd',
      version=str_version,
      description='Commonly used function library by MT',
      url='https://github.com/zywvvd/utils_vvd',
      author='zywvvd',
      author_email='zywvvd@mail.ustc.edu.cn',
      license='MIT',
      packages=find_packages(),
      zip_safe=False,
      include_package_data=True,
      install_requires= ['pypinyin', 'opencv-python'],
      python_requires='>=3')

  • 其中 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 文件,需要在 setup.py 文件中额外指定
  • 建立 config 对象,使用 add_data_files 函数添加文件路径
  • 示例 setup.sh
代码语言:javascript
复制
import sys
import setuptools
from setuptools import find_packages, setup
from numpy.distutils.core import setup
from numpy.distutils.misc_util import Configuration
from os.path import join, dirname, realpath

str_version = '2.0.15'



def configuration(parent_package='', top_path=''):
    # this will automatically build the scattering extensions, using the
    # setup.py files located in their subdirectories
    config = Configuration(None, parent_package, top_path)

    pkglist = setuptools.find_packages()
    for i in pkglist:
        config.add_subpackage(i)
    config.add_data_files(join('mtutils', 'assets', '*.json'))
    config.add_data_files(join('mtutils', 'assets', '*.jpg'))

    return config


if __name__ == '__main__':
    pass
    setup(
        configuration=configuration,
        name='mtutils',
        version=str_version,
        description='Commonly used function library by MT',
        url='https://github.com/zywvvd/utils_vvd',
        author='zywvvd',
        author_email='zywvvd@mail.ustc.edu.cn',
        license='MIT',
        packages=['mtutils'],
        zip_safe=False,
        install_requires= ['numba', 'func_timeout', 'pypinyin', 'opencv-python', 'sklearn'],
        python_requires='>=3')

pypi 账号

代码语言:txt
复制
- Linux :  `~/.pypirc`
- Windows: `C:\Users\Username\.pypirc`文件内容:
代码语言:javascript
复制
[distutils]
index-servers=pypi

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

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

发布 python 包

  • 在命令行中切换到当前目录,输入:
代码语言:javascript
复制
python setup.py sdist

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

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

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

安装 twine :

代码语言:javascript
复制
pip install twine

生成 whl 包

  • 安装 whell 升级 setuptools
代码语言:javascript
复制
pip install wheel
pip install --upgrade setuptools

  • 执行命令
代码语言:javascript
复制
python setup.py bdist_wheel

  • dist 文件夹中会生成 whl 包
  • 可以 pip install xxx.whl 直接安装

管理你的包

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

分享包

  • 现在链接互联网的人讲道理可以使用如下命令来安装我们的包
代码语言:javascript
复制
pip install utils-vvd

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

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

1pip install -i https://pypi.org/project utils-vvd

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

可能遇到的错误

  • 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](http://ansitowin32.py/) line 59, in closed return stream.closed 解决方案

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月3日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 创建自己的 python 包
    • 先置条件
      • 包结构
      • pypi 打包非 py 文件
      • pypi 账号
      • 发布 python 包
      • 生成 whl 包
      • 管理你的包
      • 分享包
      • 可能遇到的错误
      • 参考资料
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档