Python1003-分发

本文介绍了Python中的包管理和发布流程,包括使用distutils、setuptools、pip和wheel等工具进行包的构建、安装及发布的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么使用包管理

Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了。
但是为了更多项目调用使用,或者共享给别人,就需要打包,或发布到网络,以便供人使用。
目的也是为了复用。
Pypi(Python Package Index)公共的模块存储中心,https://pypi.python.org/pypi

主要工具

distutils

官方库distutils,使用安装脚本setup.py来构建、安装包。
从1998年就是标准库的一部分,直到2000年停止开发

setuptools

它是替代dist础s的增强版工具集,包含easy_install工具,使用ez_setup.py文件。支持egg格式的构建和安装。
提供查询、下载、安装、构建、发布、管理等包管理功能。
setuptools是包管理的核心模块。

后来。setuptools开发缓慢了,出现基于setuptools的distribute来替代setuptools。2013年,这两个项目重新合并,distribute被废弃setuptools依然是Python安装打包的标准方式。

pip

pip目前包管理的事实标准。
构建在setuptools只上,替代easy_install的。同样提供丰富的包管理功能。
从Python3.4开始直接包含在安装文件中。

wheel

提供bdist_wheel作为setuptools的扩展命令,这个命令可以用来生成新打包格式wheel。pip从1.4版本开始提供了一个wheel子命令来安装wheel包。当然,需要先安装wheel模块。它可以让Python库以二进制形式安装,而不需要在本地编译。

使用setup.py打包

创建一个源代码分发包的例子,参照例子
https://docs.python.org/3.5/distutils/setupscript.html
查看子命令
setup.py – help[cmd1cmd2…] python setup.py –help-commands
$ setup.py cmd –help

# 包结构
m
|-- __init__.py
|-- m1.py
|-- m2
    |-- __init__.py
    |-- m21
        |-- __init__.py

setup.py如下

from distutils.core import setup

# 导入setup函数并传参
setup(name = 'm',
      version = '0.1.1',
      description = 'Python test m',
      author = 'stevenxue',
      author_email = 'stevenxue@test.com',
      # url='https://www.',
      # packages = ['m', 'm.m1', 'm.m2', 'm.m2.m21'],
      packages = ['m']
      )

# name 名字
# version 版本
# packages = [] 打包列表
# packages = ['m'], 指定m,就会把m所有的额非目录子模块打包
# ['m', 'm.m1.m2.m3'],逐级建立目录,但是只把m的所有非目录子模块打包,把m.m1.m2.m3打包
# description 描述信息
# author 作者
# author_email 作者邮件
# url 包的主页,可以不写

查询命令的帮助
$ python setup.py cmd –help

build命令,编译

创建一个build目录
$ python setup.py build
以下是packages = [‘m’]配置的结果

running build
running build_py
creating build
creating build\lib
creating build\lib\m
copying m\m1.py -> build\lib\m
copying m\__init__.py -> build\lib\m

在项目目录下多了一个build目录,有一个lib子目录,lib下就是模块m的目录了。
m目录下的*.py文件被复制了,但是子目录没有被复制。

以下是packages = [‘m.m2.m21’]配置的结果

running build
running build_py
creating build
creating build\lib
creating build\lib\m
creating build\lib\m\m2
creating build\lib\m\m2\m21
copying m\m2\m21\__init__.py -> build\lib\m\m2\m21

可以看出,逐级构建了同样的目录结构,并只拷贝了m21的__init__.py文件
以下是packages = [‘m’, ‘m.m2.m21’]配置结果

running build_py
creating build
creating build\lib
creating build\lib\m
copying m\m1.py -> build\lib\m
copying m\__init__.py -> build\lib\m
creating build\lib\m\m2
creating build\lib\m\m2\m21
copying m\m2\m21\__init__.py -> build\lib\m\m2\m21

bulid得到的文件,直接拷贝到其他项目就可以用

install命令,安装

build后就可以install,直接运行
$ python setup.py install
如果没有bulid,辉县build编译,然后安装。

sdist命令,分发

sdist命令
$ python setup.py sdist
创建源代码的分发包。
产生一个dist目录,里面生成一个带版本号的压缩包。
在其他地方解压这个文件,里面有setup.py,就可以使用$ python setup.py install安装了,也可以$ pip install m-0.1.0.zip直接使用pip安装这个压缩包。

$ python setup.py bdist_wininst  # 只做windows下的分发包
$ python setup.py bdist_rpm      # 打包成rpm

可以把自己写好的模块发布到公布的Pypi上,也可以搭建Pypi私服,供企业内部使用。
Pypi里面的模块没有太好的审核机制,不保证安全,请谨慎使用。

wheel包

安装wheel依赖
$ pip install wheel
setup.py修改如下

from setuptools import setup


setup(name = 'm',
      version = '0.1.1',
      description = 'Python test m',
      author = 'stevenxue',
      author_email = 'stevenxue@test.com',
      url='https://www.pythonedu.com',
      packages = ['m', 'm.m2.m21']
      )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值