前言

昨天把自己的VASP文件处理库进行了打包并上传到PyPI,现在可以直接通过pip和easy_install来安装VASPy啦(同时欢迎使用VASP做计算化学的童鞋们加星和参与进来),

由于自己的记性真是不咋地,怕时间久了就忘了,于是在这里趁热打铁以自己的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版本>=2.7.9或者>=3.4,setuptools和pip是已经安装好的,可能需要进行更新到最新版本

pip install -U pip setuptools

可以使用包管理工具,例如

yum install pip

sudo apt-get install pip

通过get-pip.py脚本安装,如果检测到没有安装wheel和setuptools也会自动安装

python get-pip.py

具体的工具安装和介绍就不多讲了,可以请参考requirements for installing packages

包中不同文件的作用

setup.py

这个文件是打包整个项目最重要的文件,它里面提供了两个主要的功能:

setup()函数,此函数的参数指定了如何配置自己的项目。

命令行工具,包括打包,测试,发布等。可以通过下面的命令查看;

python setup.py --help-commands

setup.cfg

此文件包含了构建时候的一些默认参数例如构建bdist_wheel的时候的--universal参数

[bdist_wheel]

universal=1

这样每次打包的时候就会默认使用--universal参数了,效果类似:

python setup.py bdist_wheel --universal

README.rst

这个最初我是用markdown写的,打包发布到PyPI之后发现PyPI不支持markdown的渲染,页面上真是一片混乱,于是就用reStrutruedText的语法重新写了一遍。毕竟标记语言语法基本上可以秒上手,实在不行找个模板比葫芦画瓢就行。

reStructureText的语法规则可参考官方文档:Quick reStructuredText

其实还有一种方法就是使用pandoc将markdown转换成rst格式,一种省事的方式就是使用pyandoc模块在发布的时候自动转换。

具体方法可以参考:Use Markdown README's in Python modules

MANIFEST.in

此文件在打包的时候告诉setuptools还需要额外打包那些文件,例如我VASPy中的单元测试的测试数据文件我就使用这个文件将其包含进来。当然README,LICENSE这些也可以通过它来一起打包进来。

下面是我自己的MANIFEST.in的内容:

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()的参数

name

versions = "vaspy"

是整个项目的名字,打包后会使用此名字和版本号。

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安装的时候会对这些依赖项进行安装。

关于这个参数与requirements.txt的区别可以参考:install_requires vs Requirements files

classifier

这个参数提供了一系列的分类,在PyPI上会将其放入不同的目录中讲项目进行归类。

具体的categories的名称和规则参考:https://pypi.python.org/pypi?%3Aaction=list_classifiers

test_suite

这个参数可以帮助我们使用

python setup.py test

来跑单元测试,再也不需要单独再写一个脚本例如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.

也就是说这个参数可以接受多种类型的参数:

接收unittest.TestCase子类,我们可以讲所有单元测试写入一个测试用例中,然后import进来,再传你给test_suite

接收函数对象,此函数对象没有任何参数,且返回一个unittest.TestSuite.这样我们就可以单独写一个函数,将多个测试用例合并成一个suite然后返回,然后再将函数import进来传给test_suite。

模块和包名称,我就是使用这种方式,之前自己的测试都是分开的多个脚本,这样我添加一个__init__.py就可以将其变成一个包,将包名传给test_suite,setuptools就会神奇的将此包下的所有测试全部跑一边,这样我以后再加测试脚本的时候直接就添加新的脚本就好了,其他的都不需要改动了。

运行效果:

zjshao@SHAO-PC:/mnt/d/Dropbox/Code/CentOS_code/VASPy$ python setup.py test

running test

running egg_info

creating vaspy.egg-info

writing vaspy.egg-info/PKG-INFO

writing top-level names to vaspy.egg-info/top_level.txt

writing dependency_links to vaspy.egg-info/dependency_links.txt

writing manifest file 'vaspy.egg-info/SOURCES.txt'

reading manifest file 'vaspy.egg-info/SOURCES.txt'

reading manifest template 'MANIFEST.in'

writing manifest file 'vaspy.egg-info/SOURCES.txt'

running build_ext

test_compare (tests.incar_test.InCarTest)

Make sure we can compare two InCar objects correctly. ... ok

test_eq (tests.incar_test.InCarTest)

Test __eq__() function. ... ok

...

此处省略若干输出

----------------------------------------------------------------------

Ran 22 tests in 3.574s

OK

发布自己的python包

1. 首先先去PyPI注册帐号

2. 配置~/.pypirc如下:

[distutils]

index-servers =

pypi

pypitest

[pypi]

username:ShaoZhengjiang

password:mypassword

[pypitest]

username:ShaoZhengjiang

password:mypassword

3. 然后注册并上传自己的包到测试服务器

pypi提供了一个测试服务器,我们可以在这个测试服务器上做测试。

python setup.py register -r pypitest

然后

python setup.py sdist upload -r pypitest

若没有问题我们应该不会得到任何错误。

4. 上传至PyPI

若上面的测试成功,我们就可以按照相同的步骤将包注册并上传。

python setup.py register -r pypi

python setup.py sdist upload -r pypi

python解析器打包_打包发布Python模块的方法详解相关推荐

  1. 合法的python变量名import_python 环境变量和import模块导入方法(详解)

    1.定义 模块:本质就是.py结尾的文件(逻辑上组织python代码)模块的本质就是实现一个功能 文件名就是模块名称 包: 一个有__init__.py的文件夹:用来存放模块文件 2.导入模块 imp ...

  2. python导入模块的变量_python 环境变量和import模块导入方法(详解)

    1.定义 模块:本质就是.py结尾的文件(逻辑上组织python代码)模块的本质就是实现一个功能 文件名就是模块名称 包: 一个有__init__.py的文件夹:用来存放模块文件 2.导入模块 for ...

  3. python语言的格式框架_django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...

  4. python对文件的处理_python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...

  5. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

  6. 怎么打开python shell_Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发 ...

  7. python process 函数_Python Process创建进程的2种方法详解

    前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...

  8. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  9. python画图软件是哪个_Python实现画图软件功能方法详解

    Python实现画图软件功能方法详解,按钮,事件,绑定,快捷键,直线 Python实现画图软件功能方法详解 易采站长站,站长之家为您整理了Python实现画图软件功能方法详解的相关内容. 概述 虽然P ...

最新文章

  1. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码
  2. linux中的查找文件夹
  3. java定焦点_Android 开发 Camera1_如何使用对焦功能
  4. nodejs开发游戏服务器遇到的性能问题
  5. 将Session写入Memcache
  6. [html] 写页面布局时需要考虑哪些方面的因素?
  7. ORACLE SQL总结六:管理方案对象
  8. Java 轻量级锁原理详解(Lightweight Locking)
  9. 【渝粤教育】电大中专审计原理与实务 (2)作业 题库
  10. 【学习】013 Servlet、Cookie、Session的简述
  11. adb工具包的安装和使用(Windows)
  12. 100个最励志最科学的无敌成功法则
  13. APP 基本框架设计
  14. Sitemesh小记
  15. html5对锚的更改,HTML5之锚链接
  16. [HNOI2002] 沙漠寻宝题解
  17. Vue项目加载过慢优化研究
  18. 多域名SSL证书介绍
  19. SSM巢湖学院校园报修系统毕业设计源码021813
  20. Shader学习的基础知识( 三十一)水波效果

热门文章

  1. 一机难求:折叠手机是未来趋势还是小众需求?
  2. 那位全心投入本地生活的首席科学家!
  3. 揭秘支撑双 11 买买买背后的硬核黑科技!
  4. 网易云音乐工程师,亲自揭晓消息队列改造之路! | 技术头条
  5. 三次技术转型,程序员的北漂奋斗史
  6. 350 个在家办公的人,创造了估值 10 亿美元的代码共享平台
  7. 马蜂窝承认部分点评造假;阿里要发射卫星;iPhone XR 供不应求 | 极客头条
  8. 开源不止,前进不息:2018 OpenInfra Days China 来了!
  9. 今日头条遭罚 94 万;快手、火山小视频整改「低俗」;Wi-Fi 万能钥匙被调查 | CSDN极客头条
  10. 随机森林筛选特征Matlab,特征筛选(随机森林)