python程式碼打包釋出
阿新 • • 發佈:2020-09-17
引自:https://blog.csdn.net/qq_16912257/article/details/80160639
python程式碼打包釋出
1.
distutils
VSsetuptools
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=’[email protected]’, 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