• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
QQ糖_尤尤
博客园    首页    新随笔    联系   管理    订阅  订阅
python代码打包发布

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

python代码打包发布


1. distutils VS setuptools

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

Distributing Python Modules

posted on 2020-09-17 10:21  QQ糖_尤尤  阅读(866)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3