制作一个python egg 并发布到PyPI

来源:转载

最近写了一个可以在终端上输出ASCII表的Python公共库PrintTable,GitHub地址github PrintTable。

最后将脚本打包并且发布到PyPI的过程也是挺长的,第一次学习记录一下。

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_packagessetup( 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 = '[email protected]', packages = find_packages(), include_package_data = True, platforms = 'any', install_requires = [],)

上面这些配置信息一般已经够我们用了,如果需要更多的话,setup.py配置信息这是官方文档中setup.py的详细配置信息介绍。

MANIFEST.in文件包含了一些打包时不会被自动包含进去的附加文件。其中最广泛包含进去的是README.md,因为这个项目说明文件打包时不会被自动包含进去。

include README.md

打包

通过执行下列语句来进行打包:

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的压缩包了。

发布到PyPI

首先我们需要在PyPI上注册一个帐号,你可以选择PyPI注册页面和命令行注册两种方式:

$ python setup.py register -r pypirunning registerrunning egg_infowriting printtable.egg-info/PKG-INFOwriting top-level names to printtable.egg-info/top_level.txtwriting dependency_links to printtable.egg-info/dependency_links.txtreading manifest file 'printtable.egg-info/SOURCES.txt'reading manifest template 'MANIFEST.in'writing manifest file 'printtable.egg-info/SOURCES.txt'running checkWe 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. quitYour selection [default 1]: 1Username: prozhuchenPassword: Registering prinble to https://pypi.python.org/pypiServer response (200): OKI 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 archiveremoving 'printtable-1.0' (and everything under it)running uploadSubmitting dist/printtable-1.0.tar.gz to https://pypi.python.org/pypiServer response (200): OK

此时在网页上就可以看到自己的源代码包啦。

现在我们使用pip install packagename,就可以使用我们自己写的Python库了。

每次我们想更新我们自己的库时,只需要更新代码文件夹内的代码和setup.py里的version即可。

注意

每次上传时,我们的名字或者版本号两者有一个必须和以前的不一样,也就是打包生成的name-version.tar.gz名字和以前上传的压缩包不一样才行。覆盖是行不通的哦。



分享给朋友:
您可能感兴趣的文章:
随机阅读: