python代碼打包發布


引自:https://blog.csdn.net/qq_16912257/article/details/80160639

python代碼打包發布

python打包(packaging)常用的兩個工具:distutilssetuptools

  • 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.dat2.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_modulesExtension實例的集合。

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

Distributing Python Modules


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM