本文主题如下:

编写一个包(Python 源代码),但不是本文的重点。

编译包,观察编译后的文件。

发布包,发布的包可以有多种类型。

如何在 Pypi 中查看已发布的包

注意:

本文编写的包在 Python2 环境下测试通过,实际上这个包(只是个例子)比较简单,在 Python3 下也能运行。

本文知识点可能陈旧,比如 Python Pypi 官方已做了很大改变。

1. 编写包源代码

这篇文章主要描述如何发布一个包,不描述如何编写一个包,如果你没有代码(只想学习如何发布包),可下载下面的示例。

$ wget "https://files.pythonhosted.org/packages/96/66/43e6df87373557553be2b4343db27d008c6dcefa110ccff38cba1459ca07/ywdblogmath-0.1.tar.gz"

2. 查看 setup.py

为了生成和发布包,必须编写 setup.py 文件,编写该文件必须依赖于 setuptools 包,这个包本身也是一个 Python 包。.

#!/usr/bin/env python
from setuptools import setup
setup(name='ywdblogmath',
version='0.1',
description='A silly ywdblogmath package',
author='ywdblog',
author_email='ywdblog@gmail.com',
url='http://www.yudadan.com/',
packages=['ywdblogmath', 'ywdblogmath.adv'],
)

望文生义,不过多讲解相应的参数。

3. 测试本地包

首先将该代码生成一个本地包,然后编写代码测试该包的功能。

在开发模式下安装包:

$ python setup.py develop

观察安装后生成的文件:

/usr/local/lib/python2.7/dist-packages/ywdblogmath.egg-link

/usr/local/lib/python2.7/dist-packages/easy-install.pth

这二个文件包含的内容就是 /root/python(一个软连接)。

编写测试文件 example.py :

import sys
import ywdblogmath
print(ywdblogmath.add(4,5))
print(ywdblogmath.division(4, 2))
print(ywdblogmath.multiply(10, 5))
print(ywdblogmath.squareroot(48))

然后运行 example.py:

$ python  example.py
9
2
50
6.92820323028.

4. 配置 pypi

(1)为了发布包,必须在 pypi.org 注册一个用户,注册邮箱需要验证。

(2)配置 $HOME”.pypirc” 文件:

[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = pypi.org 登录名
password = pypi.org 登陆密码

5. 发布包

在发布包之前,运行下列命令了解所有可用的命令:

$ python setup.py --help-commands

先编译包:

$ python setup.py build

运行完成后生成 /root/python/build 目录,所以编译的文件保存在该目录下。

(1)生成 tar.gz 包

$ python setup.py sdist

运行后产生下列文件:

/root/python/dist/ywdblogmath-0.1.tar.gz

/root/python/ywdblogmath.egg-info (python setup.py egg_info 命令也会生成该文件)

(2)生成 egg 包

$ python setup.py bdist_egg

运行后产生下列文件:

/root/python/dist/ywdblogmath-0.1-py2.7.egg

/root/python/ywdblogmath.egg-info (python setup.py egg_info 命令也会生成该文件)

(3)生成 wheel 包

$ python setup.py bdist_wheel

运行后产生下列文件:

/root/python/dist/ywdblogmath-0.1-py2-none-any.whl

/root/python/ywdblogmath.dist-info

最后发布包(任何一个命令都可以):

# 发布 .tar.gz 包
$ python setup.py sdist upload
# 发布 egg 包
$ python setup.py bdist_egg upload
# 发布 wheel 包
$ python setup.py bdist_wheel upload

至于发布什么类型的包,读者自己决定,如果想让所有的包安装工具(比如 pip、easy_install )都能安装你发布的包,可同时发布这三种类型的包。

登录 pypi.org 查看发布的包

在发布包的时候,可能会遇到很多命令行提示的错误,这些内容不是本文的重点,另外注意 setpy.py 中的包版本号,可以测试发布多版本的包。

手把手教你发布一个Python包的更多相关文章

  1. 手把手教你做一个python+matplotlib的炫酷的数据可视化动图

    1.效果图 2.注意: 上述资料是虚拟的,为了学习制作动图,构建的. 仅供学习, 不是真实数据,请别误传. 当自己需要对真实数据进行可视化时,可进行适当修改. 3.代码: #第1步:导出模块,固定 i ...

  2. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  3. PWA入门:手把手教你制作一个PWA应用

    摘要: PWA图文教程 原文:PWA入门:手把手教你制作一个PWA应用 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 简介 Web前端的同学是否想过学习app开发,以弥补自 ...

  4. R数据分析:跟随top期刊手把手教你做一个临床预测模型

    临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域顶级期刊的文章,文章名在下面 Ballesta-Castillejos ...

  5. iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  6. 如何发布一个npm包(基于vue)

    前言:工作的时候总是使用别人的npm包,然而我有时心底会好奇自己如何发布一个npm包呢,什么时候自己的包能够被很多人喜欢并使用呢...今天我终于迈出了第一步. 前提:会使用 npm,有 vue 基础, ...

  7. 从0到1发布一个npm包

    从0到1发布一个npm包 author: @TiffanysBear 最近在项目业务中有遇到一些问题,一些通用的方法或者封装的模块在PC.WAP甚至是APP中都需要使用,但是对于业务的PC.WAP.A ...

  8. 发布一个npm包(webpack loader)

    发布一个npm包,webpack loader: reverse-color-loader,实现颜色反转. 初始化项目 mkdir reverse-color-loader cd ./reverse- ...

  9. 用Python手把手教你搭一个Transformer!

    来源商业新知网,原标题:百闻不如一码!手把手教你用Python搭一个Transformer 与基于RNN的方法相比,Transformer 不需要循环,主要是由Attention 机制组成,因而可以充 ...

随机推荐

  1. 用HttpClientFactory来实现简单的熔断降级

    前言 在2.1之后,有不少新东西,其中HttpClientFactory算是一个.HttpClientFactory涉及的东西也不算少,三四种clients , 请求中间件,与Polly的结合,生命周 ...

  2. ADO.NET基础学习 二(Command对象)

    ②command对象用来操作数据库.(三个重要的方法:ExecuteNonQuery(),ExecuteReader(),ExecuteScalar()) ⑴以update(改数据)为例,用到Exec ...

  3. 【前端】js中数组对象根据内容查找符合的第一个对象

    今天在写一个混合开发版的app,其中一个功能是扫描快递单号,客户要求不能扫描重复的快递单号!所有就验证查出. 首先实现思路就是: 1.定义一个全局数组变量:var nubList = []; 2.进入 ...

  4. 零基础学Python--------入门篇 第1章 初始Python

    入门篇 第1章  初始Python 1.1  Pyhton 概述 1.1.1 了解 Python Python,本义是指“蟒蛇”.1989年,荷兰人Guido van Rossum发明了一种面向对象的 ...

  5. 程序员50题(JS版本)(六)

    程序26:给一个不多于5位的正整数.要求:一.求它是几位数,二.逆序打印出各位数字. var test=456; var arr=[]; arr[0]=test%10; arr[1]=parseInt ...

  6. Linux设备驱动之IIO子系统——IIO框架数据读取

    IIO DATA ACCESS IIO数据获取 只有两种方法可以使用IIO框架访问数据; 通过sysf通道进行一次性捕获,或通过IIO字符设备进行连续模式(触发缓冲). One-shot captur ...

  7. 把vux中的@font-face为base64格式的字体信息解码成可用的字体文件

    在最近移动端项目中用到了vux,感觉用着还习惯,当把vux使用到PC端的时候出现了IE浏览器出现,这样的错误信息: CSS3114: @font-face 未能完成 OpenType 嵌入权限检查.权 ...

  8. 【20190228】JavaScript-获取子元素

    在写JavaScript的时候发现了一个获取子节点的坑,如以下的html结构 <div id="parent"> <div>1</div> &l ...

  9. Ubuntu 16.04安装Zabbix 3.2 版本

    系统环境:ubuntu16.04 注意:为了便于实验测试,需要关闭防火墙: parallels@zabbix-server:~$ sudo systemctl stop ufw   parallels ...

  10. BGP:所有邻居都启动了BGP,则无须建立首尾逻辑邻居,否则就需要首尾建立逻辑邻居。

    配置说明:都通过loopback 口作为bgp 连接口,并且要配置ebgp多跳,同时配置loopback口的静态路由. 以AR2为例: 第一种场景:所有直接相连的邻居都启动了BGP,则路由可以随意扩散 ...