一、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中安装包的方式有很多种:

源码包:python setup.py install

在线安装:pip install 包名 / easy_install 包名

pip install的东西从哪里来的?

从PyPI (Python Package Index)来的,官网是:  https://pypi.python.org/pypi

执行pip install terminaltranslator命令的时候,它就会去从官方网站搜terminaltranslator,搜到了就下载压缩包并解压安装,如果没有搜索到就会报错。

1、源码包安装

源码包安装就是你在本地编写好了一个模块,自己安装在本地使用,别人(即使是你自己)都不能 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 importsetup, find_packages

setup(

name="demo",

version="1.0",

author="zbj",

author_email="22@qq.com",

packages=find_packages(),

)#3.编辑 hello.py

defhello_func():print("HelloWorld")#4.编辑 myapp.py

defmyapp_func():print("嘿嘿嘿")

2.源码安装

#进入setup.py所在的那层目录

cd /tmp/demo#检查setup.py 是否有错误(warning不是错误)

python setup.py check#安装

python setup.py install

3.结果

打包之后多出两个文件夹,分别是demo.egg-info和dist。demo.egg-info是必要的安装信息,

而dist中的压缩包就是安装包,此时默认的egg包,egg包就是zip包,如果需要使用egg包,name将egg后缀改成zip解压即可

4.测试

测试的时候需要注意导包路径和当前所在路径

目前所在路径是: /tmp/demo

直接进入python解释器: python3(我自己安装的python3版本)

5.setuptools更多参数用法

2、打包上传到pypi

2-1、配置文件和打包

1.创建文件的目录结构

hello/

|--hello| |--hello.py| `-- __init__.py|--LICENSE|--README.md

`-- setup.py

2. setup.py

from setuptools importsetup, find_packages

setup(

name="hello",

version='1.0',

description="Test Hello",

url="None",

author="zbj",

author_email="22@qq.com",

license="MIT",

packages=find_packages()

)

3. LICENSE

LICENSE代表许可证

Copyright (c) 2018The Python Packaging Authority

Permissionishereby granted, free of charge, to any person obtaining a copy

of this softwareand associated documentation files (the "Software"), to dealinthe Software without restriction, including without limitation the rights

to use, copy, modify, merge, publish, distribute, sublicense,and/orsell

copies of the Software,and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:

The above copyright noticeand this permission notice shall be included inall

copiesorsubstantial 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

打包之后多出两个文件夹,分别是hello.egg-info和dist。hello.egg-info是必要的安装信息,而dist中的压缩包就是安装包

dist中包含两个文件:

dist/

|-- hello-1.0-py3-none-any.whl

`-- hello-1.0.tar.gz

6.打包方式介绍

有了上面的 setup.py 文件,我们就可以打出各种安装包,主要分为两类:sdist 和 bdist。

Source distribution

使用 sdist 可以打包成 source distribution,支持的压缩格式有:

FormatDescriptionNotes

zip

zip file (.zip)

Windows 默认

gztar

gzip’ed tar file (.tar.gz)

Unix 默认

bztar

bzip2’ed tar file (.tar.bz2)

xztar

xz’ed tar file (.tar.xz)

ztar

compressed tar file (.tar.Z)

tar

tar file (.tar)

使用方式为:

$ python setup.py sdist --formats=gztar,zip

现在目录下多出 dist 和 *.egg-info 目录,dist 内保存了我们打好的包,上面命令使用 --formats 指定了打出 .tar.gz 和 .zip 包,如果不指定则如上表根据具体平台默认格式打包。

包的名称为 setup.py 中定义的 name, version以及指定的包格式,格式如:firstApp-0.0.1.tar.gz。

Built distribution

使用 bdist 可以打出 built distribution,和源码包相比,由于预先构建好,所以安装更快:

FormatDescriptionNotes

gztar

gzipped tar file (.tar.gz)

Unix 默认

bztar

bzipped tar file (.tar.bz2)

xztar

xzipped tar file (.tar.xz)

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 提供了如下命令:

CommandFormatsNotes

bdist_dumb

tar, gztar, bztar, xztar, ztar, zip

Windows 默认 zip, Unix 默认 gztar

bdist_rpm

rpm, srpm

bdist_wininst

wininst

bdist_msi

msi

所以上面打 rpm 包可以使用:

$ python setup.py bdist_rpm

2-2、上传到Pypi

此时前置打包的步骤已经完成,可以开始进行上传。

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: https://test.pypi.org/legacy/username:

password:

4. 检验

这时候就可以,下载包,然后运行里面方法了

pip install hello

在本地测试的时候可以直接安装打包好的dist下的包:

pip install xxx.tag.gz

测试功能正常后再上传到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的进阶使用

上面使用setuptools时只是简单的用一个配置文件setup.py就完成了打包信息填写。在真实的开发环境中,往往是多个文件配合。以openstack的打包为例。openstack中引入了Pbr的管理工具。

pbr是setuptools的辅助工具,最初为openstack开发,基于d2to1。Pbr会读取和过滤setup.cfg中的内容,然后将解析后的数据提供给setup.py作为参数。

setup.cfg提供setup.py的默认参数,同时易于修改。Setup.py先解析setup.cfg文件,然后执行相关命令。包括以下功能:1、从git中获取Version,AUTHORS和ChangeLog信息2、SphinxAutodoc。pbr会扫描project,找到所有模块,生成stubfiles3、Requirements。读取requirements.txt文件,生成setup函数需要依赖包4、long_description。从README.rst、README.txt或者READMEfile中生成long_description参数

Pbr的文件很简单,如下。配置之后会自动寻找目录下的setup.cfg文件,解析文件参数给setup.py使用。

setup.py

from setuptools importsetup

setuptools.setup(

setup_requires=['pbr'],

pbr=True)

setup.cfg

[metadata]

name=my_package

version=attr: src.VERSION

description=My package description

long_description=file: README.rst, CHANGELOG.rst, LICENSE.rst

keywords=one, two

license= BSD 3-Clause License

classifiers=Framework :: Django

License :: OSI Approved :: BSD License

Programming Language :: Python ::3Programming Language :: Python ::3.5[files]

packages=project_name

data_files=etc/pbr = etc/pbr/*[global]

setup-hooks =pbr.hooks.setup_hook

[entry_points]

console_scripts=project_name=project.cmd.mycmd:main

[options]

zip_safe=False

include_package_data=True

packages=find:

scripts=bin/first.py

bin/second.py

install_requires=requests

importlib; python_version== "2.7"[options.package_data]* = *.txt, *.rst

hello= *.msg

[options.extras_require]

pdf= ReportLab>=1.2; RXP

rest= docutils>=0.3; pack ==1.1, ==1.3[options.packages.find]

exclude=src.subpackage1

src.subpackage2

[options.data_files]/etc/my_package =site.d/00_default.conf

host.d/00_default.conf

data= data/img/logo.png, data/svg/icon.svg

python怎么更新setuptools_Python打包之setuptools相关推荐

  1. python怎么更新setuptools_Python Setuptools 升级(Upgrade)

    安装命令  python setup.py  install 更新命令 pip install –upgrade setuptools 打包 :pyinstaller -F Domain.py 打包的 ...

  2. python怎么更新setuptools_Python包管理工具setuptools详解

    0.什么是setuptools setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的.用户在使用setuptools ...

  3. python 升级setuptools_Python深入:setuptools进阶

    作者:gqtcgq Setuptools是Python Distutils的加强版,使开发者构建和发布Python包更加容易,特别是当包依赖于其他包时.用setuptools构建和发布的包与用Dist ...

  4. python一键打包工具setuptools

    分发工具setuptools 一般 Python 安装会自带 setuptools,如果没有可以使用 pip 安装:(注意:python2,python3都安装了,若要使用python3,需要使用pi ...

  5. Python写的代码打包成.exe可执行文件

    Python写的代码打包成.exe可执行文件 1. 安装pyinstaller 2. [在线生成icon](http://www.ico51.cn/) 3. 打包命令 pyinstaller -i x ...

  6. py2exe打包python_和python爱好者谈谈如何在新版python中使用py2exe打包可执行程序

    大家好,今天和大家聊聊把python程序打包那些事. 我们编写好程序之后,肯定要发给别人使用,如果不给别人使用,你编程序干什么. python编译器本身没有打包的功能,如果我们编写好程序,要想给别人使 ...

  7. python安装软件 No module named setuptools

    转载自:http://www.cnblogs.com/mindmac/archive/2012/03/07/2383441.html python在安装软件时,有时会出现No module named ...

  8. python如何更新包_python如何更新包 python更新包代码示例

    python如何更新包?本篇文章小编给大家分享一下python更新包代码示例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Python安装新包,pip是 ...

  9. visual studio无法更新_微软发布 VS Code Python 四月更新

    微软发布了 4 月的 Visual Studio Code Python 扩展更新,该版本包括 Jypyter Notebooks 中的 ipywidgets 支持以及 Django 和 Flask ...

最新文章

  1. 语义表征的无监督对比学习:一个新理论框架
  2. Vue中使用form表单提交刷新问题
  3. mybatis学习8之缓存
  4. Java读取word文件,字体,颜色
  5. jvm内存分配与收回策略
  6. 【渝粤教育】电大中专电商运营实操12作业 题库
  7. 计算机 注册表 远程桌面,仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)...
  8. QuerWrapper常用方法
  9. 为什么这么多人在用Redis
  10. AS/400开发经验点滴(六)如何制作下拉菜单
  11. 0302-软件工程第一次作业
  12. 在Mac上修改jupyter默认地址
  13. Android 高通配置SUPL
  14. 2022年终总结-知识沉淀、疫情、展望未来
  15. 单点登录SSO----JSON Web Token(JWT)机制
  16. 第二节HDFS完全分布式集群搭建与配置及常见问题总结
  17. ev4视频转换为mp4工具使用教程
  18. 【图像增强】基于gabor滤波器实现指纹增强含Matlab源码
  19. 微信小程序获取rich-text(富文本)渲染内容高度,rich-text(富文本)里img 样式设置
  20. 李开复的《AI·未来》是本好书?我不见得

热门文章

  1. 【转载】CRC32校验算法C语言版(查表法)
  2. linux如何编译boost指定库,linux下编译安装boost库
  3. 如何使用“视频编辑王”制作年会视频
  4. ASP.NET Identity 三(转载)
  5. 系统分析与设计学习笔记(二)用例模型
  6. 单臂路由的原理以及配置
  7. java 获取邮编_JAVA爬取邮编信息,生成XML
  8. CSS unicode-range特定字符使用font-face自定义字体
  9. 漏洞5万美元一个贵不贵?
  10. JAVA递归函数示例 - 阶乘计算