python 打包_学习python, 从打包开始

1. 为什么要打包

先不说要构建什么大项目,在平时数据分析过程中,我们往往会涉及到写一些小脚本,但很不利于维护管理,重复使用以及与同事交流。通过打包封装,然后发布就可以让这些方便起来。而且我觉得这是一个相对宏观的知识。有了一些基础后了解这些宏观的东西反而可以让自己在平时的搬砖中更加清楚。起码碰到bug时会更加快捷地解决。

cat /etc/issue
python --version
## Ubuntu 18.04.4 LTS \n \l
##
## Python 3.6.8

当然这是属于开发工作,是有别于数据分析的。首先,要尽量让自己的开发环境保持干净。所以用virtualenv来构建是这样的环境是很合适的。这样的开发环境构建可以参考《拒绝conda, 用virtualenv构建多版本的python开发环境》。当然你也可以选pipenv。我所用的开发系统为WSL, 编辑器为vim。配置可以参考《工欲善其事必先利其器--开发者利器vim插件篇》

写包不等于可以发文章,写文章发文章是另外操作。但是,如果开发的包能够解决某些痛点问题,那还是比较有意义的。

2. 前期基础

首先,你要会一些基础的python语法,知道用pippython setup.py install来安装。

3. 总体流程

这里介绍的打包方式是比较常见的。后面是可以发布到pypi上,然后用户可以通过pip或者python setup.py install来安装。

一个项目的开始,首先都是基于想解决什么问题,有什么意义。意义有大有小。这部分是属于更上层的东西,没办法具体说出来,只能根据个人工作内容经历,思维,眼光等等来了。这里介绍的是适用于刚好有一些脚本,然后想封装的人。因为我之前也是写一个个脚本,后面花了点时间把一些脚本封装写了BioFtParse包。所以这里主要还是基于这个包来说。

3.1 总体结构

这里的BioFtParse为我的项目仓库名,在Linux下用tree查看该仓库下的文件结构。

tree BioFtParse
## BioFtParse
## ├── BioFtParse
## │   ├── genbank.py
## │   ├── __init__.py
## │   ├── parse_genbank.py
## │   └── _version.py
## ├── LICENSE.txt
## ├── Makefile
## ├── MANIFEST.in
## ├── README.md
## └── setup.py
##
## 1 directory, 9 files

可以发现BioFtParse仓库下还有一个BioFtParse文件夹,其实这个就是包名,里面含有的.py就是代码了,有些包还有submodule,这种时候就会在改包名的文件夹下再建子文件然后再来存代码。平时看到的from matplotlib.axes import XXX这里的axes就是一个submodule, 而XXX就存在这个submodule的文件夹下。这部分基本就是所有代码的存放位置。

3.2 配置setup.py

R包的封装基本就是靠DESCRPTION文件来配置。而python则由setup.py来完成。

cat BioFtParse/setup.py
## import sys
## from setuptools import setup, find_packages
## from BioFtParse import __version__
##
## requirements = ["Bio", "pandas", "argparse"]
##
##
## setup(
## name='BioFtParse',
## author='xu shuangbin',
## author_email='xshuangbin@163.com',
## version=__version__,
## url='http://github.com/xiangpin/',
## description='Multiple Bioinformatics format files parse toolkits',
## license='Apache 2.0',
## packages=find_packages(),
## python_requires='>3.0.0',
## install_requires=requirements,
## entry_points={
## 'console_scripts': [
## 'parse_genbank.py=BioFtParse.parse_genbank:main'
## ],
## },
## classifiers=[
## 'Environment :: Console',
## 'Development Status :: 3 - Alpha',
## 'License :: OSI Approved :: Apache Software License',
## 'Programming Language :: Python :: 3'
## ],
## )

前面的import就是来导入相应包的函数或者类。这块其实就是setuptools包的使用,如果你想更详细了解,看它给的官方文档是最好的。这里我只讲setup这个函数,因为基本够了。这个函数中的name参数是必需的,就是这个包的名字;authorauthor_email为可选记录作者名与邮箱地址;version参数也是必需的,版本号。版本号控制对于开发来说也是一块需要注意的事情,这里不展开;description参数可选,简短描述这个软件包;url项目地址,可选项;license可选GPL,MIT等等,这块也是需要注意的事,不同的license关系到后续的能否用于商业目的,是否需要公开源码等等,感兴趣的自己到https://choosealicense.com/licenses/了解;packages为必需项,这里的包比较简单find_packages()。有些包放在lib或者src文件夹下,这时候就要用find_packages(where="lib")或者find_packages(where="src")来指定。python_requires为指定的python版本;install_requires为该包的依赖包,用list存放;entry_points则控制当有可执行脚本时,来编译成的脚本名.比如这里的parse_genbank.py是由BioFtParse下的parse_genbank中的main来的。所以安装好后可以通过parse_genbank.py来使用。categorizing则是对这个包的一些属性进行声明,是可选的。

3.3 README.md 与 LICENSE

README.md可以写这个项目是什么,可以用来处理什么,如何安装使用等等。LICENSE就是写许可证。

3.4 MANIFEST.in

这个文件用来存放,封装发布是需要含有的文件。

3.5 Makefile

以上基本完成了整个包的封装,接下来就是发布。pypi是目前python主要的第三方库的仓库。平时下载包很多都是从这个仓库下载,上传的话也是上传到这里。当然新手测试可以先上传到testpypi上。这个仓库与pypi是互不影响的,可以说就是专门为测试建的仓库。要上传到上面需要先注册这两个仓库的账号。具体操作就是到网站主页注册,傻瓜式操作不讲。而在上传前我们需要用如下操作压缩好我们的包。

# 生成.tar.gz的源码包
python setup.py sdist
# 生成pip下载用的.whl文件,其实也是源码包与一些metadata信息压缩了下
python setup.py bdist_wheel --universal --bdist-dir /tmp/bdist_wheel
#以上两个命令会生成dist, XXX.egg-info, build中间文件夹,需要上传的是dist文件夹下的文件

# 接下来就是用twine将这些文件上传到testpypi或者pypi仓库上
# 先用pip install twine安装 twine
twine upload -r testpypi dist/*
# pypi
twine upload dist/*

而我为了偷懒,就将这些操作写在Makefile里,这样以后我只需要make dist或者make pypi就可以进行这些操作。

cat BioFtParse/Makefile
## dist:
## python setup.py sdist;
## python setup.py bdist_wheel --universal --bdist-dir /tmp/bdist_wheel
##
## dist2:
## python setup.py sdist;
## python setup.py bdist_wheel --bdist-dir /tmp/bdist_wheel
##
## egg:
## python setup.py bdist_egg
##
## testpypi: dist
## twine upload -r testpypi dist/*
##
## pypi: dist
## twine upload dist/*
##
## clean:
## rm -rf build dist BioFtParse.egg-info

以上基本就是python的打包流程,可满足大部分需求了。当然,如果是做专业开发的,那要在此基础上去找资料或者看别人的结构与setup.py等等。

                   长按下方,关注公众号

c20d9f9df428d517c5de874088a9224a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值