python解释器下载Python打包之setuptools
Setuptools是Python Distutils的加强版,使开发者构建和发布Python包更加容易,特别是当包依赖于其他包时。⽤setuptools构建和发布的包与⽤Distutils发布的包是类似的。包的使⽤者⽆需安装setuptools就可以使⽤该包。如果⽤户是从源码包开始构建,并且没有安装过setuptools的话,则只要在你的setup脚本中包含⼀个bootstrap模块(ez_setup),⽤户构建时就会⾃动下载并安装setuptools了。
功能亮点:
利⽤EasyInstall⾃动查、下载、安装、升级依赖包
创建Python Eggs
包含包⽬录内的数据⽂件
⾃动包含包⽬录内的所有的包,⽽不⽤在setup.py中列举
⾃动包含包内和发布有关的所有相关⽂件,⽽不⽤创建⼀个MANIFEST.in⽂件
⾃动⽣成经过包装的脚本或Windows执⾏⽂件
⽀持Pyrex,即在可以setup.py中列出.pyx⽂件,⽽最终⽤户⽆须安装Pyrex
⽀持上传到PyPI
可以部署开发模式,使项⽬在sys.path中
⽤新命令或setup()参数扩展distutils,为多个项⽬发布/重⽤扩展
在项⽬setup()中简单声明entry points,创建可以⾃动发现扩展的应⽤和框架
python中安装包的⽅式有很多种:
1. 源码包:python setup.py install
2. 在线安装:pip install 包名 / easy_install 包名
pip install的东西从哪⾥来的?
执⾏pip install terminaltranslator命令的时候,它就会去从官⽅⽹站搜terminaltranslator,搜到了就下载压缩包并解压安装,如果没有搜索到就会报错。
源码包安装就是你在本地编写好了⼀个模块,⾃⼰安装在本地使⽤,别⼈(即使是你⾃⼰)都不能 pip install xxx 下载你的模块
1.准备⼯作
# 1.⾸先创建我们需要的⽬录结构和⽂件(⾃⾏创建)
# 当前测试的⽬录是: /tmp/demo
`-- demo
|-- helloapp
|  |-- hello.py
|  `-- __init__.py
|-- __init__.py
|-- myapp
|  |-- __init__.py
|  `-- myapp.py
`-- setup.py
# 2.编辑 setup.py
from setuptools import setup, find_packages
setup(
name="demo",
version="1.0",
author="zbj",
author_email="22@qq",
packages=find_packages(),
)
# 3.编辑 hello.py
def hello_func():
print("HelloWorld")
# 4.编辑 myapp.py
def myapp_func():
print("嘿嘿嘿")
2.源码安装
# 进⼊setup.py所在的那层⽬录
cd /tmp/demo
# 检查setup.py 是否有错误(warning不是错误)
python setup.py check
# 安装
python setup.py install
3.结果
打包之后多出两个⽂件夹,分别是-info和dist。-info是必要的安装信息,
⽽dist中的压缩包就是安装包,此时默认的egg包,egg包就是zip包,如果需要使⽤egg包,name将egg后缀改成zip解压即可
4.测试
测试的时候需要注意导包路径和当前所在路径
⽬前所在路径是: /tmp/demo
直接进⼊python解释器: python3(我⾃⼰安装的python3版本)
5.setuptools更多参数⽤法
1.创建⽂件的⽬录结构
hello/
|-- hello
|  |-- hello.py
|  `-- __init__.py
|-- LICENSE
|-- README.md
`-- setup.py
2. setup.py
from setuptools import setup, find_packages
setup(
name="hello",
version='1.0',
description="Test Hello",
url="None",
author="zbj",
author_email="22@qq",
license="MIT",
packages=find_packages()
)
3. LICENSE
LICENSE代表许可证
Copyright (c) 2018 The Python Packaging Authority
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4. setuptools 和wheel
⾸先需要保证你有最新版的setuptools和wheel
python -m pip install --user --upgrade setuptools wheel
5. 打包模块
# 进⼊到setup.py同级的⽬录下
python setup.py sdist bdist_wheel
打包之后多出两个⽂件夹,分别是-info和dist。-info是必要的安装信息,⽽dist中的压缩包就是安装包dist中包含两个⽂件:
dist/
|-- hello-1.0-py3-none-any.whl
`-- hello-1.
6.打包⽅式介绍
有了上⾯的 setup.py ⽂件,我们就可以打出各种安装包,主要分为两类:sdist 和 bdist。
Source distribution
使⽤ sdist 可以打包成 source distribution,⽀持的压缩格式有:
Format Description Notes
zip zip file (.zip)Windows 默认
gztar gzip’ed tar file (.)Unix 默认
bztar bzip2’ed tar file (.tar.bz2)
xztar xz’ed tar file (.)
ztar compressed tar file (.tar.Z)
tar tar file (.tar)
使⽤⽅式为:
$ python setup.py sdist --formats=gztar,zip
现在⽬录下多出 dist 和 *.egg-info ⽬录,dist 内保存了我们打好的包,上⾯命令使⽤--formats指定了打出.和.zip包,如果不指定则如上表根据具体平台默认格式打包。
包的名称为setup.py中定义的name, version以及指定的包格式,格式如:firstApp-0.0.。
Built distribution
使⽤ bdist 可以打出 built distribution,和源码包相⽐,由于预先构建好,所以安装更快:
Format Description Notes
gztar gzipped tar file (.)Unix 默认
bztar bzipped tar file (.tar.bz2)
xztar xzipped tar file (.)
ztar compressed tar file (.tar.Z)
tar tar file (.tar)
zip zip file (.zip)Windows 默认
rpm RPM
pkgtool Solaris pkgtool
sdux HP-UX swinstall
wininst self-extracting ZIP file for Windows
msi Microsoft Installer.
使⽤上,和 sdist ⼀样,可以使⽤--formats指定包格式。如:
$ python setup.py bdist --formats=rpm
同时为了简化操作,setuptools 提供了如下命令:
Command Formats Notes
bdist_dumb tar, gztar, bztar, xztar, ztar, zip Windows 默认 zip, Unix 默认 gztar
bdist_rpm rpm, srpm
bdist_wininstwininst
bdist_msi msi
所以上⾯打 rpm 包可以使⽤:
$ python setup.py bdist_rpm
此时前置打包的步骤已经完成,可以开始进⾏上传。
1.利⽤twine将包上传上去,⾸先安装twine
pip install twine
2.注册 PyPI 账号
3.上传
# 使⽤ upload
$ twine upload dist/*
输⼊ username 和 password 即上传⾄ PyPI。
# 如果不想每次输⼊账号密码,可以在家⽬录下创建 .pypirc ⽂件,内容如下:
[distutils]
index-servers =
pypi
pypitest
[pypi]
username:
password:
[pypitest]
repository: /legacy/
username:
password:
4. 检验
这时候就可以,下载包,然后运⾏⾥⾯⽅法了
pip install hello
在本地测试的时候可以直接安装打包好的dist下的包:
pip install
测试功能正常后再上传到pypi
提⽰
5. 更新版本
更新版本也很简单,只需要修改setup.py下的version
然后重新⽣成档案,上传
python setup.py sdist bdist_wheel
twine upload dist/hello-0.0.2*
6.更新本地moudle版本
pip install --upgrade hello
或者是先卸载,再安装
# 卸载hello
pip uninstall hello
# 安装hello
pip install hello
上⾯使⽤setuptools时只是简单的⽤⼀个配置⽂件setup.py就完成了打包信息填写。在真实的开发环境中,往往是多个⽂件配合。以openstack的打包为例。openstack中引⼊了Pbr的管理⼯具。