要想成为网红去抖音,上微博;而想让你的程序红一把,当然是全球最大的同性交友社区github。作为Python程序员,当然还需要把程序发布到pypi上,让全世界的pythoner都来下载使用。
这里有个误区,不是非要高深的技术才有面子发布出来共享,而是使用方便和能解决实际问题的程序最受欢迎。
最经典的例子是requests库作者Kenneth Reitz ,在这之前已经有url请求库了,但是使用较繁复,KR想把请求接口做得更人性化一点(for humans)(让程序员更容易使用),所以就有了requests库,这是他22岁时写出来的(关于K神的经历看猿人学这篇《Python requests作者是一个什么样的人》),pypi上官方统计requests库几年前的全球下载量已达3亿次,K神可谓一战成名。
当然requests库其实有技术含量的,设计一套人性化,好用的接口本身就是技术含量。
pypi上也有很多很火的,是那种解决了很实际问题的程序。比如Faker这个库,它可以按要求随机生成一个人名,一个手机号,一个车牌号,浏览器UA等等。这个功能很实用,因为我们在写程序的时候经常会用到一些数据,Faker可以帮助我们生成这些假数据,而且要随机,不需要我们再去自己写规则来随机生成了。比如你在写爬虫时要频繁修改UA,以免被对方网站访问限制了,Faker能随机生成指定浏览器厂商的真实UA版本号。
Faker库的技术一点都不复杂,需要你收集这些数据信息,整理出规律后让程序按规则去随机生成就行了。但是Faker库却非常受欢迎,当知道pypi上有这么一个库后,经常需要组装这类数据的我,只能感叹一句,what a fxxk,我怎么没想到做一个呢。
所以如果你有一个程序,能帮助其它人解决一点实在的问题,就大胆向pypi提交吧,把你的大名挂在pypi上,看着有人下载使用你的程序,也是美滋滋的。
怎样向pypi提交发布你的包呢?
学习和使用Python的同学都应该知道,Python的包管理工具pip,平常使用的各种非官方内置的包基本上都可以通过pip install xxx来安装。那么pip背后的运作机制是怎样的呢?pip install的东西从哪里来的?
从PyPI (Python Package Index)来的,老官网的地址是:
https://pypi.python.org/pypi/
现在已经启用新的域名:
https://pypi.org/
执行pip install xxx命令的时候,它就会去从官方网站搜xxx,搜到了就下载压缩包并解压安装,如果没有搜索到就会报错。
众所周知的原因,国内访问国外网站总是不那么顺畅,于是就有了PyPI镜像,国内有很多,我用过阿里云的,中科大的,豆瓣的。阿里云的同步的好像不够及时,中科大的好像很及时,所以我就用中科大的。那么,该怎么用这些镜像呢?
方法1: 给pip加参数-i 后面跟镜像的url,但是要记住并每次都写这个url可是一件难事。
方法2: 编写配置文件~/.pip/pip.conf:
[global]
index-url = https://mirrors.ustc.edu.cn/pypi/web/simple
如何把你自己的Python程序发布到PyPI上面去?
首先去官网注册你的账号,不能师出无名总得留下你的大名嘛。注册地址:
https://pypi.org/account/register/
注册好后编写你的配置文件~/.pypirc
[distutils]
index-servers =
pypi
pypitest
[pypi]
repository=https://upload.pypi.org/legacy
username=Your-Account
password=Your-Password
[pypitest]
repository=https://test.pypi.org/legacy
username=Your-Account
password=Your-Password
这里配置了两个地址,一个是PyPI Live,是正式发布Python包的;另一个是PytPI Test 是用来正式发布之前验证你的包是否正常。
准备好你的Python包
通常你的代码目录结构如下:
root-dir/ # 你的代码的根目录
setup.py
setup.cfg
LICENSE.txt
README.md
mypackage/
__init__.py
foo.py
bar.py
baz.py
其中的setup.py就是安装包的文件,格式如下:
from distutils.core import setup
setup(
name = 'mypackage',
packages = ['mypackage'], # 跟上面代码目录下面的包名一致
version = '0.1',
description = 'A setup test package',
author = 'veelion',
author_email = 'veelion@gmail.com',
url = 'https://github.com/veelion/mypackage', # 指向 github 仓库的URL
keywords = ['testing', 'logging', 'example'], # 一些关键词
classifiers = [],
)
setup可以从两个包里面调来使用,一个是上面用的distutils,另外一个是setuptools,如:
from setuptools import setup
这两个包功能基本一样,而setuptools支持wheel(未来包管理的趋势),所以一般用setuptools更好一些。再多说两句wheel,它是用来准备替换老的egg的,其中很好的一个优点是“二进制格式发布”,当包内含有C/C++写的扩展的时候可以把.so/.dll等二进制库打包进去,实现“一次编译,到处使用”的目标。省的用户编译时需要解决一堆依赖问题。
但是setuptools好像是不支持单文件包,即你的包只是一个.py文件而非上面说的是一个带__init__.py我目录。必须通过py_modules来指定单个文件作为包。
上面说的是用setup.py管理Python包让其他人import用,而非在命令行下执行。
如果你的包支持命令行运行,可以在setup.py里面通过entry_points 来指定运行入口,也可以通过scripts来把相关可以执行文件安装到bin目录下:
发布到PyPI
首先,打包生成压缩包
python setup.py sdist
python setup.py bdist_wheel (distutils不支持这个wheel选项)
然后,上传到PyPI:
python setup.py register #注册你的包,如果出现与已有包重名则报错
python setup.py upload
或者可以用twine:
twine register dist/xxx.gz
twine register dist/xxx.whl
twine upload dist/*
就这样,一个明日之星的程序就发布到pypi上了,哈哈。

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。
***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.con 原创,没有猿人学授权,请勿以任何形式转载。***
说点什么吧...