引自:https://blog.csdn.net/qq_16912257/article/details/80160639
python代码打包发布
python打包(packaging)常用的两个工具:distutils
和setuptools
。
-
distutils
是标准打包工具,被包含在标准库中,可以用作简单的python发布。 -
setuptools
并不是python标准库的一部分,它的诞生是为了克服distutils
的不足,是distutils
的增强版。
这里只介绍distutils
的使用
2. distutils基本使用
(1)简介
当使用distutils时,setup脚本是构建、发布、安装模块的核心。setup脚本的目的是向distutils
描述你的模块发布,以便于在你的模块上操作的各种命令都能正确进行。setup脚本主要包含一个setup()
函数调用,模块开发者提供给distutils
的大多数信息都是通过setup()
函数的关键字参数传递的。
下面是distuitls
模块的setup.py
文件示例:
1 from distutils.core import setup 2 3 setup(name=’Distutils’, 4 version=’1.0’, 5 description=’Python Distribution Utilities’, 6 author=’Greg Ward’, 7 author_email=’gward@python.net’, 8 url=’http://www.python.org/sigs/distutils-sig/’, 9 packages=[’distutils’, ’distutils.command’],
(2)一个例子
构建如下目录结构:
test/
├── foobar
│ ├── __init__.py
│ ├── bar.py
│ ├── foo.py
│ └── subfoo
│ ├── __init__.py
│ └── blah.py
└── setup.py
setup.py
书写如下:
1 from distutils.core import setup 2 setup(name='foobar', 3 version='1.0', 4 description='test module', 5 author='brown', 6 packages=['foobar', 'foobar.subfoo'], 7 )
在test目录一级,执行install命令
python setup.py install
使用pip show查看刚刚安装的包
pip show foobar
3. 安装package data
有时,我们需要将一些数据文件(数据、配置、日志等)打包进去,这时需要使用package_data
关键字
(1)例子
在上面例子test/foobar
添加data
目录,并在里面创建1.dat
、2.dat
文件,新的目录结构如下:
test/
├── foobar
│ ├── __init__.py
│ ├── bar.py
│ ├── data
│ │ ├── 1.dat
│ │ └── 2.dat
│ ├── foo.py
│ └── subfoo
│ ├── __init__.py
│ └── blah.py
└── setup.py
更改setup.py
为:
1 from distutils.core import setup 2 3 setup(name='foobar', 4 version='1.0', 5 description='test module', 6 author='brown', 7 packages=['foobar', 'foobar.subfoo'], 8 package_data={'foobar': ['data/*']}, 9 )
然后执行python setup.py install
安装。
4. 扩展模块
如果你的代码里包含一些C、C++代码,就需要做些额外操作,包括:声明扩展名字、源文件位置、include目录或lib目录。
使用ext_modules
关键字参数,ext_modules
是Extension
实例的集合。
Extension
参数如下:
Extension(’pkg.foo’, [’src/foo.c’], include_dirs=[’include’], libraries=['lib'])
pkg.foo
是扩展包名,它决定了你在python代码中如何引用foo.c
;src/foo.c
是C代码相对位置;include
是C代码依赖的include目录;lib
是C代码依赖的库目录;
(1)例子
建立如下目录的文件:
test/
├── cpp
│ ├── bar.c
│ └── foo.c
├── foobar
│ ├── __init__.py
│ └── test.py
└── setup.py
setup.py
文件如下:
1 from distutils.core import setup, Extension 2 3 setup(name='foobar', 4 version='1.0', 5 description='test module', 6 author='brown', 7 packages=['foobar'], 8 ext_modules=[ 9 Extension('foobar.foo', ['cpp/foo.c']), 10 Extension('foobar.bar', ['cpp/bar.c']) 11 ], 12 )
然后install
Ref