打包发布Python模块的方法详解
前言 昨天把自己的VASP文件处理库进行了打包并上传到PyPI,现在可以直接通过pip和easy_install来安装VASPy啦(同时欢迎使用VASP做计算化学的童鞋们加星和参与进来), VASPy的GotHub地址:https://github.com/PytLab/VASPy 由于自己的记性真是不咋地,怕时间久了就忘了,于是在这里趁热打铁以自己的VASPy程序为例对python的打包和上传进行下总结。 VASPy包文件结构 首先写贴上来VASPy包的整个文件结构, 后面的内容都是以此为例进行说明: VASPy/ ├── LICENSE ├── MANIFEST ├── MANIFEST.in ├── README.rst ├── requirements.txt ├── scripts │ ├── change_incar_parameters.py │ ├── create_inputs.py │ └── ... ├── setup.cfg ├── setup.py ├── tests │ ├── incar_test.py │ ├── __init__.py │ ├── oszicar_test.py │ ├── outcar_test.py │ ├── testdata │ │ ├── CONTCAR │ │ ├── DOS_SUM │ │ ├── ELFCAR │ │ └── ... │ └── ... └── vaspy ├── __init__.py ├── iter.py ├── matstudio.py └── ... 4 directories, 54 files 打包和安装第三方包的工具 这里我们需要借助setuptools和pip等工具进行自己包的打包和发布以及安装,如果需要构建成wheel还需要安装wheel模块。如果python版本gt;=2.7.9或者gt;=3.4,setuptools和pip是已经安装好的,可能需要进行更新到最新版本
可以使用包管理工具,例如 yum install pip sudo apt-get install pip 通过get-pip.py脚本安装,如果检测到没有安装wheel和setuptools也会自动安装
具体的工具安装和介绍就不多讲了,可以请参考requirements for installing packages 包中不同文件的作用 setup.py 这个文件是打包整个项目最重要的文件,它里面提供了两个主要的功能: setup()函数,此函数的参数指定了如何配置自己的项目。
setup.cfg 此文件包含了构建时候的一些默认参数例如构建bdist_wheel的时候的--universal参数 [bdist_wheel] universal=1 这样每次打包的时候就会默认使用--universal参数了,效果类似:
README.rst 这个最初我是用markdown写的,打包发布到PyPI之后发现PyPI不支持markdown的渲染,页面上真是一片混乱,于是就用reStrutruedText的语法重新写了一遍。毕竟标记语言语法基本上可以秒上手,实在不行找个模板比葫芦画瓢就行。 其实还有一种方法就是使用pandoc将markdown转换成rst格式,一种省事的方式就是使用pyandoc模块在发布的时候自动转换。 MANIFEST.in 此文件在打包的时候告诉setuptools还需要额外打包那些文件,例如我VASPy中的单元测试的测试数据文件我就使用这个文件将其包含进来。当然README,LICENSE这些也可以通过它来一起打包进来。 include README.rst include requirements.txt include LICENSE recursive-include scripts * recursive-include tests * 具体的语法规则可以参考:The MANIFEST.in template vaspy/ 此文件夹就是vaspy源代码所在的包。 tests/ 此文件夹也是一个子包,包含了单元测试脚本,为了能使用python setup.py test进行单元测试,特地添加了__init__.pys使其成为一个包。 setup()的参数 这里只介绍我使用的几个参数,其他参数的具体使用可以参考:https://docs.python.org/3/distutils/setupscript.html name
是整个项目的名字,打包后会使用此名字和版本号。 version from vaspy import __version__ version = __version__ description 是一个简短的对项目的描述,一般一句话就好,会显示在pypi上名字下端。 long_description 是一个长的描述,相当于对项目的一个简洁,如果此字符串是rst格式的,PyPI会自动渲染成HTML显示。这里可以直接读取README.rst中的内容。 url 包的连接,通常为GitHub上的链接或者readthedocs的链接。 packages 需要包含的子包列表,setuptools提供了find_packages()帮助我们在根路径下寻找包,这个函数distutil是没有的。 setup_requires 这个参数定义了VASPy安装和顺利运行所需要的其他依赖项(最基本的),使用pip安装的时候会对这些依赖项进行安装。 classifier 这个参数提供了一系列的分类,在PyPI上会将其放入不同的目录中讲项目进行归类。 test_suite 这个参数可以帮助我们使用
来跑单元测试,再也不需要单独再写一个脚本例如run_tests.py这样来跑单元测试了。 A string naming a unittest.TestCase subclass (or a package or module containing one or more of them, or a method of such a subclass), or naming a function that can be called with no arguments and returns a unittest.TestSuite. If the named suite is a module, and the module has an additional_tests() function, it is called and the results are added to the tests to be run. If the named suite is a package, any submodules and subpackages are recursively added to the overall test suite. 也就是说这个参数可以接受多种类型的参数: (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |