使用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的集成。

在pypi上发布python包详细教程的更多相关文章

  1. Python环境搭建—安利Python小白的Python安装详细教程

    人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...

  2. 面系那个对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法

    面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...

  3. 在Pypi上发布自己的Python包

    使用Python编程的都知道,Python的包安装非常的方便,一般都是可以pip来安装搞定: sudo pip install <package name> pip的安装请移步:https ...

  4. Python 包构建教程

    目录 setuptools 和 setup.py 你所需要做的事 & 一些概念 基础概念 关于源码分发文件和二进制分发文件 示例和分发选择 pure python module package ...

  5. gitlab+jenkins自动发布Python包到私有仓储

    背景 有个私有仓储,地址为https://your.repo.com/pypi/ 代码存储在gitlab, 地址为https://gitlab.company.com/software.git CI为 ...

  6. 发布python包

    写python程序时常常要导入各种包,使用其中的模块或功能.我们如果有可以复用的功能或模块也可以发布成包,并安装在自己或他人电脑上,以供自己或别人使用.python发布包的步骤如下: 一.首先为模块创 ...

  7. 使用release自动打包发布正式版详细教程

    昨天写了个release插件的版本管理,今天就在自动发布过程中遇到了许多坑,只能再写一篇自动发布详细教程,纪念我那昨日逝去的青春 (╥ _ ╥`) release正常打包发布流程按照如下几个阶段: C ...

  8. vs中python包安装教程

    vs安装python很简单,只需要在vs安装包中选择python就可以了,这里使用的python3.7: 如果有了解,都知道安装python包的指令:"pip install xxx&quo ...

  9. 2019-02-20 在PyPI测试平台发布Python包

    参考Packaging Python Projects, 源码在nobodxbodon/test-package-for-pypi 包名/__init__.py: 测试变量 = "值&quo ...

随机推荐

  1. 10个HTML5美化版复选框和单选框

    单选框Radiobox和复选框checkbox在网页中也十分常见,虽然它没有按钮的交互性强,但是如果能把它们像按钮那样美化一下,那也是非常不错的.本文收集了10个相对比较漂亮的美化版单选框和复选框,希 ...

  2. <Spark Streaming><Flume><Integration>

    Overview Flume:一个分布式的,可靠的,可用的服务,用于有效地收集.聚合.移动大规模日志数据 我们搭建一个flume + Spark Streaming的平台来从Flume获取数据,并处理 ...

  3. synchronized(六)

    package com.bjsxt.base.sync006;/** * 锁对象的改变问题 * @author alienware * */public class ChangeLock { priv ...

  4. Jmeter监听tomcat

    配置cd /usr/local/tomcat/conf/tomcat-users.xml

  5. 整理有关浏览器兼容性的css样式

    去掉IE自带的删除功能的×号 input::-ms-clear{display:none;} 去掉IE自带密码框的眼睛样式 input::-ms-reveal{display:none;}

  6. python 实现图的深度优先和广度优先搜索

    在介绍 python 实现图的深度优先和广度优先搜索前,我们先来了解下什么是"图". 1 一些定义 顶点 顶点(也称为"节点")是图的基本部分.它可以有一个名称 ...

  7. jsp-servlet(2)响应HTML文档-书籍管理系统

    基础知识预备:  目标: 构建一个书籍管理系统,实现以下功能. 功能: 1 图书信息查询,(查) 2 书籍管理:添加书籍 3 书籍管理:修改书籍信息 4 书籍管理:删除书籍 一.预备工作 Book{ ...

  8. SDM(Supervised Descent Method and its Applications to Face Alignment )

    sdm SDM 人脸对齐的核心内容很简单,就是特征到偏移量的映射:                                           Ix = R I 是特征,x是映射矩阵,R是偏移 ...

  9. php-fpm高并发配置[1000+]

    Dell R430 2个物理CPU,每个CPU有6个内核: www.conf: pm = dynamic pm.max_children = 120 pm.start_servers = 8 pm.m ...

  10. 编译Thrift支持golang

    本文已经是很久以前的文章了,也不知道新版本thrift如何 Thrift是一个跨语言的服务部署框架,Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译 ...