最近写了一个可以在终端上输出ASCII表的Python公共库PrintTable,GitHub地址github PrintTable。
最后将脚本打包并且发布到PyPI的过程也是挺长的,第一次学习记录一下。
1. Python脚本 -> 包
首先我们先构建出自己包的架构。这里拿PrintTable这个项目的文件结构举例。
- Python Packaging User Guide这是Python打包的官方英文文档。
- PyPA sample project这是一个官方示例库结构。
├── LICENSE
├── MANIFEST.in
├── printtable
│ ├── __init__.py
│ ├── printtable.py
├── README.md
├── setup.cfg
├── setup.py
LICENSE:版权信息文件
MANIFEST.in:打包时不会被自动包含进去的附加文件清单
printtable:Python程序,我们要注意这个文件夹里必须有__init__.py
这个文件。即使里面是空的。这样做是为了防止某些目录有一个共同的名字。
README.md:项目说明文件
setup.py:安装程序文件
setup.cfg:包含setup.py额外配置信息的文件
其中setup.py
是我们主要需要配置的文件。
from setuptools import setup, find_packages
setup(
name = 'printtable',
version = '1.0',
keywords = ('print table'),
description = 'a library for drawing the table in the terminal',
license = 'MIT License',
url = 'https://github.com/prozhuchen/PrintTable',
author = 'prozhuchen',
author_email = 'prozhuchen@gmail.com',
packages = find_packages(),
include_package_data = True,
platforms = 'any',
install_requires = [],
)
上面这些配置信息一般已经够我们用了,如果需要更多的话,setup.py配置信息这是官方文档中setup.py的详细配置信息介绍。
MANIFEST.in
文件包含了一些打包时不会被自动包含进去的附加文件。其中最广泛包含进去的是README.md
,因为这个项目说明文件打包时不会被自动包含进去。
include README.md
2. 打包
通过执行下列语句来进行打包:
python setup.py xxx
其中xxx
可以是下列几种方式中其中一个:
sdist create a source distribution (tarball, zip file, etc.)
bdist create a built (binary) distribution
bdist_dumb create a "dumb" built distribution
bdist_rpm create an RPM distribution
bdist_wininst create an executable installer for MS Windows
bdist_egg create an "egg" distribution
举个例子:
python setup.py sdist #生成的文件支持 pip
此时在根目录出现了dist
文件夹,里面有name-version.tar.gz
这个文件,这就是我们要发布到PyPI的压缩包了。
3. 发布到PyPI
首先我们需要在PyPI上注册一个帐号,你可以选择PyPI注册页面和命令行注册两种方式:
$ python setup.py register -r pypi
running register
running egg_info
writing printtable.egg-info/PKG-INFO
writing top-level names to printtable.egg-info/top_level.txt
writing dependency_links to printtable.egg-info/dependency_links.txt
reading manifest file 'printtable.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'printtable.egg-info/SOURCES.txt'
running check
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Your selection [default 1]:
1
Username: prozhuchen
Password:
Registering prinble to https://pypi.python.org/pypi
Server response (200): OK
I can store your PyPI login so future submissions will be faster.
(the login will be stored in /home/zc/.pypirc)
Save your login (y/N)?y
当你注册完毕后,会在用户根目录下创建文件~/.pypirc,这样以后就不需要输入帐号密码了。
然后我们需要向PyPI上发布自己的源代码包。
$python setup.py sdist upload
...
Creating tar archive
removing 'printtable-1.0' (and everything under it)
running upload
Submitting dist/printtable-1.0.tar.gz to https://pypi.python.org/pypi
Server response (200): OK
此时在网页上就可以看到自己的源代码包啦。
现在我们使用pip install packagename
,就可以使用我们自己写的Python库了。
每次我们想更新我们自己的库时,只需要更新代码文件夹内的代码和setup.py
里的version
即可。
4. 注意
每次上传时,我们的名字或者版本号两者有一个必须和以前的不一样,也就是打包生成的name-version.tar.gz
名字和以前上传的压缩包不一样才行。覆盖是行不通的哦。