包管理
为什么使用包管理
Python的模块或者源文件直接复制到目标项目目录中,就可以导入使用了
但是为了更多想木雕用使用,或者分享给别人,就需要打包,就需要打包,或发布到网络,以便供人使用.
目的也是为了复用.
Pypi(Python Package Index),公共的米快存储中心,ht tps://Python.org/pypi
主要工具
distutils
官方库distutils,使用安装脚本setup.py来创建,安装包.
从1998年就是标准库的一部分,知道2000年停止开发.
setuptools
它是替代disutils的挣钱版工具箱, 包含easy_install工具箱, 使用ez_setup.py文件.支持egg格式的此案件和安装.提供查询,下载,安装,构建,法不,管理等包管理功能.setuptools是包管理的核心模块.
后来,setuptools开发缓慢了,出现居于setuotools的distribute来代替setuptools.2003年这连个项目从新合并,distribute被废弃,setuptools依然是Python安装打包的标准方式.
pip
pip目前包管理定义在PEP427中.
wheel文件不包含.pyc文件.提供bdist_wheel作为setuptools的扩展命令,这个命令可以用来生成打包格式wheel.
pip从1.4版本开始 提供了一个wheel之命令来安装wheel包,当然,需要安装wheel模块.
它可以让Python库以二进制安装,而不需要在本地编译.
使用setup.py打包
setup.py传概念一个源代码分法宝的例子
可以在帮助文档chm上搜索索引setup,点击最上面的Distributing Python Modules(legacy version),然后选择writing the Setup Script
m
|--__init__.py
|--m1.py
|--m2
|--__init__.py
|--m21
|--__init__.py
|--m22.py
项目根目录下,创建一个setup.py文件,setup.py如下
from distutils.core import setup
setup(name = 'm',
version='0.0.1',
description= 'Python test m',
author='seven',
author_email='abc#qwe.com',
packages = ['m']
)
builed命令,编译
创建一个builed目录
$ Python srtup.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\setup.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\lib\m\m2
creating build\lib\m\m2\m21
copying m\m2\m21\__init__.py -> build\lib\m\m2\m21
build得到的文件,直接拷贝到其他项目就可以用
install命令,安装
build后就可以install,直接运行
$ python setup.py install
如果没有build,会先build编译,然后安装.
p
y
t
h
o
n
s
e
t
u
p
.
p
y
s
d
i
s
t
创
建
源
代
码
的
分
发
包
产
生
一
个
d
i
s
t
目
录
,
里
面
生
成
一
个
带
版
本
号
的
压
缩
包
.
在
其
他
地
方
解
压
缩
这
个
文
件
,
里
面
有
s
e
t
u
p
.
p
y
,
就
可
以
使
用
python setup.py sdist 创建源代码的分发包 产生一个dist目录,里面生成一个带版本号的压缩包. 在其他地方解压缩这个文件,里面有setup.py,就可以使用
pythonsetup.pysdist创建源代码的分发包产生一个dist目录,里面生成一个带版本号的压缩包.在其他地方解压缩这个文件,里面有setup.py,就可以使用python setup.py install安装了,也可以$pip install m-0.1.0.zip直接使用pip安装这个压缩包.
bdist命令
二进制分发包,或称作安装程序.它可以生成目标操作系统的安装程序.
制作windows下的安装包
$ python setup.py bdist_wininst
$ python setup.py bdist_msi
$ python setup.py bdist --format=msi
rpm包
$ python setup.py bdist_rpm
$ python setup.py bdist --format=rpm
压缩文件
$ python setup.py bdist --format=zip
$ python setup.py bdist --format=gztar
可以把自己写好的模板发布到公共的Pypi上,也可以待见Pypi私服,共企业内部使用.
Pypi里面的米快没有太好的审核机制,不保证安全,请谨慎使用.
wheel
安装wheel依赖
$ pip install wheel
setup.py 修改如下
# from distutils.core #from distutils.core import setup
from setuptools import setup
setup(name='m',
version='1.0',
description='Python test Utilities',
author='seven',
author_email='abc@avc.com',
url='https://www.python.org/sigs/distutils-sig/',
packages=['m.m2.m21'],
)
python setup.py bdist_egg
python setup.py bdist_wheel