ylzchs

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

分类:

技术点:

相关文章:

  • 2021-11-23
  • 2021-05-22
  • 2021-11-23
  • 2021-06-23
  • 2021-11-20
  • 2022-12-23
  • 2022-02-03
  • 2022-12-23
猜你喜欢
  • 2021-09-09
  • 2021-11-23
  • 2021-11-23
  • 2022-03-11
  • 2021-11-23
  • 2021-11-23
相关资源
相似解决方案