利用distutils生成自己的函数库
前言
假定编写了一个四则运算的库。
def add(x,y):
return x+y
def division(x,y):
return x/y
def multiply(x,y):
return x*y
def substract(x,y):
return x-y
将代码保存到arithmetic.py文件中,然后复制到需要的文件目录中以备使用。比如在一个简单的计算项目中,我们可以这样使用刚刚编好的库:
import arithmetic
print (arithmetic.add(2,3))
print (arithmetic.division(2,8))
...
如果只是个人项目,或者很小的团队协作,这种做法没问题。但如果团队比较大,就有如下几个问题:
- 程序的发布。如果版本更新了,如何快速地发布给团队中的所有人。
- 保证版本同步。arithmetic.py不带任何版本信息,不利于团队成员自检版本。
遇到这些问题,我们有哪些比较好的解决方式呢?
一、使用distutils
显然,这个四则运算程序库最好是像requests之类的优秀的第三方库一样,可以方便地下载,安装,升级,卸载,也就是说能够放到PyPI上面,也能够很好地更pip或yolk这样的工具集成。Python作为“自带电池”的高级语言,自然提供了这方面的支持,那就是distutils标准库。distutils标准库至少提供了一下几方面内容:
- 支持包的构建、安装、发布(打包)。
- 支持PyPI的登记、上传。
- 定义了扩展指令的协议,包括distutils.cmd.Command基类、distutils.commands和distutils.key_words等入口点,为setuptools和pip等提供了基础设施。
要使用distutils,按习惯需要编写一个setup.py文件,作为后续操作的入口点。在arithmetic.py同层目录,创建一个setup.py文件。
#tree.
.
|------arithmetic.py
|------setup.py
它的内容如下:
from distutils.core import setup
setup(
name='arithmetic',
version='1.0',
py_modules=['arithmetic']
)
一眼就可以看出,setup.py文件的意义是执行时调用distutils.core.setup()函数,而实参是通过明明参数指定的。name参数指定的是包名;version指定版本;而py_modules参数是一个序列类型,里面包含需要安装的Python文件,在本例中就是arithmetic.py。
编写setup.py文件后,就可以使用python setup.py install把它安装到系统中了。
项目所在路径>python setup.py install
running install
running build
running build_py
copying arithmetic.py -> build\lib
running install_lib
copying build\lib\arithmetic.py -> D:\Anaconda3\Lib\site-packages
byte-compiling D:\Anaconda3\Lib\site-packages\arithmetic.py to arithmetic.cpython-37.pyc
running install_egg_info
Removing D:\Anaconda3\Lib\site-packages\arithmetic-1.0-py3.7.egg-info
Writing D:\Anaconda3\Lib\site-packages\arithmetic-1.0-py3.7.egg-info
安装成功后,我们试一下。
>>> import arithmetic
>>> dir(arithmetic)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'division', 'multiply', 'substract']
>>> arithmetic(1,2)
>>> arithmetic.add(1,2)
3
完全符合预期!
二、使用pastescript
利用pastescript的paster命令,可以让setup.py文件的创建,更加规范和快捷。
。
。
。
但是我自己也还没玩明白,等闹明白了,再分享给大家🤣