zoukankan      html  css  js  c++  java
  • 在pypi上发布python包详细教程

    使用Python编程中Python的包安装非常方便,一般都是可以pip来安装搞定:pip install <package name>,我们自己写的python也可以发布在pypi上,很简单。

    一、准备工作
    1.准备好你要发布的代码(简单的一个函数、一个类或者是一个你自己写的功能模块代码),测试代码以及目录结构

    二、在pypi上发布python包步骤如下:

    1. 注册账号:到pypi(https://pypi.org/)上注册自己的用户, 点击“Register”,填写自己的用户名,密码,邮箱。

    如果期望测试发布,同时需要注册pypitest账号(可以采用相同的用户名和密码)。
    pypitest官网:https://test.pypi.org/

    记下自己的用户名、密码,后面上传包的时候需要用到。
    也可以创建用户验证文件:vi ~/.pypirc

    [distutils]
    index-servers =
    pypi

    [pypi]
    repository: https://upload.pypi.org/legacy/
    username: 用户名
    password: 密码

    或者

    [distutils]
    index-servers =
    pypi
    pypitest

    [pypi]
    repository: https://upload.pypi.org/legacy/
    username: 用户名
    password: 密码

    [pypitest]
    repository: https://test.pypi.org/legacy/
    username: 用户名
    password: 密码

    2.安装必要的库

    打包工作主要依赖python的setuptools的包来完成,可以使用pip安装它:
    pip install setuptools

    原则上安装了pip的环境都有setuptools,但并不影响你去尝试升级一下它。
    pip install --upgrade setuptools

    twine
    这是一个简化将库发布到Pypi上流程的工具,具体的使用之后会讲到。
    pip install twine

    3.准备setup.py/setup.conf文件,它是放在你包的根目录的,这一步至关重要,包括要发布的包名字,版本,license,描述,特性(classifier)等等。

    下面是setup.py文件的示例内容,基本上只需要在这个上面修改就行了,具体如下:

    #!/usr/bin/env python
    # coding:utf-8

    from setuptools import find_packages, setup

    setup(
    name='<项目的名称>',
    version='<项目的版本>',
    description='<项目的简单描述>',
    long_description=open('README.rst').read(),
    author='<项目的作者>',
    author_email='<作者邮箱>',
    maintainer='<维护人员的名字>',
    maintainer_email='<维护人员的邮箱>',
    packages=find_packages(),
    platforms=["all"],
    url='<项目的网址,可以使用自己github的url>',
    license='BSD License',
    classifiers=[
    'Development Status :: 4 - Beta',
    'Operating System :: OS Independent',
    'Intended Audience :: Developers',
    'License :: OSI Approved :: BSD License',
    'Programming Language :: Python',
    'Programming Language :: Python :: 2.7',
    'Programming Language :: Python :: Implementation :: CPython',
    'Programming Language :: Python :: Implementation :: PyPy'
    ],
    )

    简单字段说明:
    version:这个简单,就是包的发布的版本,可以直接写在这,也可以从其他地方引用过来。
    long_description:必须是rst(reStructuredText )格式的,因为这个里面的内容是显示在pypi包首页上,我的long_description是同目录下的README.rst的内容,同时这个README也是我的github项目首页。
    packages:申明你的包里面要包含的目录,比如 ['mypackage', 'mypackage_test'] 可以是这种使用我的示例,让setuptools自动决定要包含哪些包
    install_requires:申明依赖包,安装包时pip会自动安装:格式如下(我上面的setup.py没有这个参数,因为我不依赖第三方包:)):

    也可以克隆已有仓库(推荐)
    大名鼎鼎的requests库的作者大神kennethreitz为大家准备了一个仓库作为一个setup.py的很好的模板,当然你也可以自己手写setup.py。
    git clone https://github.com/kennethreitz/setup.py

    4.如果有依赖包可以使用requirements.txt 和 test-requirements.txt申明包的依赖包和跑自动化测试的测试依赖包,具体格式示例如下:

    例如:
    mock>=2.0.0
    flake8>=3.2.1
    eventlet>=0.19.0
    nose2>=0.6.5
    cov_core>=1.15.0
    virtualenv>=15.1.0

    有了它们,结合tox等工具,可以非常方便的加入自动化测试。 
    准备这个两个文件不是必须的。但是,有了它们,用户可以自己手动安装依赖包。

    安装依赖包
    pip install -r requirements.txt

    5.准备一个项目的README.rst文件,前面也提到了它的格式要求,第一次发包,可以直接copy别人的格式,这东西熟能生巧,多写就会了。

    最终的代码结构

    │ LICENSE
    │ MANIFEST.in
    │ README.rst
    │ setup.py

    └─condition_chain
    core.py
    __init__.py
    __version__.py


    6.编写核心代码

    接下来我们就可以编写自己的代码了,要注意源代码文件夹(仓库里的my_package文件夹)的名字与setup.py里配置的包名(Name)要一致。
    另外在重新上传之前我们要修改__version__.py里的版本号,以免覆盖了以前的上传(相信会有人是需要之前版本的库的)。

    7.打包上传

    准备好上面的步骤,一个包就基本完整了,剩下的就是打包了(cd到包的根目录):

    可以使用下面命令打包一个源代码的包:
    # 在当前目录的dist文件夹下,会生成一个以tar.gz结尾的包了。
    python setup.py sdist build


    也可以打包一个wheels格式的包,使用下面的命令搞定:
    # 在dist文件夹下生成一个whl文件。
    python setup.py bdist_wheel --universal

    上传生成的包,可以使用setuptools,或者twine上传,推荐使用twine上次,因为使用setuptools上传时,你的用户名和密码是明文或者未加密传输,安全起见还是使用twine吧。
    # 上传source 包
    python setup.py sdist upload

    # 上传pre-compiled包
    python setup.py bdist_wheel upload

    使用twine上传,先安装twine
    pip install twine
    上传
    twine upload dist/*
    会提示你前面注册的用户名和密码。一切搞定,你的包现在可以通过pip在任何地方安装了。

    报错解决:
    1.HTTPError: 403 Client Error: The user 'xxx' isn't allowed to upload to project '<项目的名称>'. See https://pypi.org/help/#project-name for more information. for url: https://upload.pypi.org/legacy/

    出现这个报错一般是python包名冲突,换个包名就可以了

    2.HTTPError: 403 Client Error: Invalid or non-existent authentication information. for url: https://upload.pypi.org/legacy/

    出现这个报错一般是用户名和密码错误了,要去网站上验证一下你前面注册的用户名和密码。

    Ps:
    1.pip的安装官方教程:https://pip.pypa.io/en/stable/installing/
    2.rst的语法可以参考:http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html
    3.对于一个包,需要长久维护,自动测试建议加入,可以使用tox和与第三方CI的集成。

  • 相关阅读:
    遍历mac系统访达文件时候要注意了
    python r+ 是追加写
    Linux如何给一个python被挂起进程传递命令?
    nohup后台挂起
    树莓派建站全过程
    wechat robot
    廖雪峰笔记(转网络专题)
    【转】 前端笔记之JavaScript(十一)event&amp;BOM&amp;鼠标/盒子位置&amp;拖拽/滚轮
    【转】 前端笔记之JavaScript(十)深入JavaScript节点&amp;DOM&amp;事件
    【转】 前端笔记之JavaScript(九)定时器&amp;JSON&amp;同步异步/回调函数&amp;函数节流&amp;call/apply
  • 原文地址:https://www.cnblogs.com/zqifa/p/pypi-1.html
Copyright © 2011-2022 走看看