引自: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