1、项目打包工具:

  1. distutils 是 Python 的一个标准库
  2. setuptools 是 distutils 增强版,不包括在标准库中
  3. distribute 是 setuptools 一个分支版本
  4. distutils2 废弃

2、安装 setuptools

文档: https://setuptools.readthedocs.io/

  1. 方式一:源码安装

https://pypi.org/project/setuptools/#files下载 zip 包解压

$ python setup.py install
  1. 方式二:通过引导程序安装
$ wget http://peak.telecommunity.com/dist/ez_setup.py# 安装
$ python ez_setup.py# 更新,以下两种任选
$ python ez_setup.py –U setuptools
$ pip install -U setuptools
  1. 方式三: pip安装
$ pip install --upgrade setuptools

3、使用 easy_install

安装完 setuptools 后,就有了easy_install 的第三方管理工具

  1. 包的安装
# 通过包名,从PyPI寻找最新版本,自动下载、编译、安装
$ easy_install pkg_name# 通过包名从指定下载页寻找链接来安装或升级包
$ easy_install -f http://pythonpaste.org/package_index.html # 指定线上的包地址安装
$ easy_install http://example.com/path/to/MyPackage-1.2.3.tgz# 从本地的 .egg 文件安装
$ easy_install xxx.egg# 在安装时你可以添加额外的参数
指定安装目录:--install-dir=DIR, -d DIR
指定用户安装:--user
  1. 包的升级
# 从 pypi 中搜索并升级包
$ easy_install --upgrade pkg_name# 指定版本进行升级
$ easy_install "SomePackage==2.0"
  1. 包的删除
$ easy_install -m pkg_name

若要删除彻底,需要手动删除相关的 .egg 及 其他文件

指定安装源

~/.pydistutils.cfg

[easy_install]
index-url=http://mirrors.aliyun.com/pypi/simple/
find-links=http://mirrors.aliyun.com/pypi/simple/

4、源码包与二进制包

  1. 源码包

常见后缀:.zip, .tar, .tar.gz, .tar.bz2, .tar.Z
安装的过程,是先解压,再编译,最后才安装。安装速度较慢, 跨平台

  1. 二进制包
    常见后缀:.egg, .whl

安装过程:省去了编译的过程,直接进行解压安装。安装速度较快。

5、setup.py 的编写

简单的使用示例

from setuptools import setup, find_packagessetup(name="mytest",version="1.0",author="wangbm",author_email="wongbingming@163.com",description="Learn to Pack Python Module",# 项目主页url="http://www.baidu.com/", # 你要安装的包,通过 setuptools.find_packages 找到当前目录下有哪些包packages=find_packages()
)

6、setup 参数

setup 函数常用的参数如下

参数 说明
name 包名称
version 包版本
author 程序的作者
author_email 程序的作者的邮箱地址
maintainer 维护者
maintainer_email 维护者的邮箱地址
url 程序的官网地址
license 程序的授权信息
description 程序的简单描述
long_description 程序的详细描述
platforms 程序适用的软件平台列表
classifiers 程序的所属分类列表
keywords 程序的关键字列表
packages 需要处理的包目录(通常为包含 init.py 的文件夹)
py_modules 需要打包的 Python 单文件列表
download_url 程序的下载地址
cmdclass 添加自定义命令
package_data 指定包内需要包含的数据文件
include_package_data 自动包含包内所有受版本控制(cvs/svn/git)的数据文件
exclude_package_data 当 include_package_data 为 True 时该选项用于排除部分文件
data_files 打包时需要打包的数据文件,如图片,配置文件等
ext_modules 指定扩展模块
scripts 指定可执行脚本,安装时脚本会被安装到系统 PATH 路径下
package_dir 指定哪些目录下的文件被映射到哪个源码包
entry_points 动态发现服务和插件,下面详细讲
python_requires 指定运行时需要的Python版本
requires 指定依赖的其他包
provides 指定可以为哪些模块提供依赖
install_requires 安装时需要安装的依赖包
extras_require 当前包的高级/额外特性需要依赖的分发包
tests_require 在测试时需要使用的依赖包
setup_requires 指定运行 setup.py 文件本身所依赖的包
dependency_links 指定依赖包的下载地址

setup.cfg 文件提供 setup.py 的默认参数
配置:https://docs.python.org/3/distutils/configfile.html

  1. classifiers 分类信息

参见:https://pypi.org/pypi?%3Aaction=list_classifiers

示例:

from setuptools import setup, find_packagessetup(classifiers = [# 发展时期,常见的如下#   3 - Alpha#   4 - Beta#   5 - Production/Stable'Development Status :: 3 - Alpha',# 开发的目标用户'Intended Audience :: Developers',# 属于什么类型'Topic :: Software Development :: Build Tools',# 许可证信息'License :: OSI Approved :: MIT License',# 目标 Python 版本'Programming Language :: Python :: 2','Programming Language :: Python :: 2.7','Programming Language :: Python :: 3','Programming Language :: Python :: 3.3','Programming Language :: Python :: 3.4','Programming Language :: Python :: 3.5',]
)
  1. 文件的分发
from setuptools import setup, find_packagessetup(name="mytest",version="1.0",author="wangbm",author_email="wongbingming@163.com",description="Learn to Pack Python Module",url="http://iswbm.com/", packages=find_packages(),# 安装过程中,需要安装的静态文件,如配置文件、service文件、图片等data_files=[('', ['conf/*.conf']),('/usr/lib/systemd/system/', ['bin/*.service']),],# 希望被打包的文件package_data={'':['*.txt'],'bandwidth_reporter':['*.txt']},# 不打包某些文件exclude_package_data={'bandwidth_reporter':['*.txt']}
)

还可以使用 MANIFEST.in

include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build

配置:https://docs.python.org/3.6/distutils/sourcedist.html

  1. 依赖包下载安装
from setuptools import setup, find_packagessetup(...# 表明当前模块依赖哪些包,若环境中没有,则会从pypi中下载安装install_requires=['docutils>=0.3'],# setup.py 本身要依赖的包,这通常是为一些setuptools的插件准备的配置# 这里列出的包,不会自动安装。setup_requires=['pbr'],# 仅在测试时需要使用的依赖,在正常发布的代码中是没有用的。# 在执行python setup.py test时,可以自动安装这三个库,确保测试的正常运行。tests_require=['pytest>=3.3.1','pytest-cov>=2.5.1',],# 用于安装setup_requires或tests_require里的软件包# 这些信息会写入egg的 metadata 信息中dependency_links=["http://example2.com/p/foobar-1.0.tar.gz",],# install_requires 在安装模块时会自动安装依赖包# 而 extras_require 不会,这里仅表示该模块会依赖这些包# 但是这些包通常不会使用到,只有当你深度使用模块时,才会用到,这里需要你手动安装extras_require={'PDF':  ["ReportLab>=1.2", "RXP"],'reST': ["docutils>=0.3"],}
)
  1. 安装环境的限制
setup(...python_requires='>=2.7, <=3',
)
  1. 生成可执行文件
from setuptools import setup, find_packagessetup(name="mytest",version="1.0",author="wangbm",author_email="wongbingming@163.com",description="Learn to Pack Python Module",url="http://iswbm.com/", packages=find_packages(),# 用来支持自动生成脚本,安装后会自动生成 /usr/bin/foo 的可执行文件# 该文件入口指向 foo/main.py 的main 函数entry_points={'console_scripts': ['foo = foo.main:main']},# 将 bin/foo.sh 和 bar.py 脚本,生成到系统 PATH中# 执行 python setup.py install 后# 会生成 如 /usr/bin/foo.sh 和 如 /usr/bin/bar.pyscripts=['bin/foo.sh', 'bar.py']
)

7、 使用 setup.py 构建包

  1. 构建源码发布包
$ python setup.py sdist# 指定发布包格式
$ python setup.py sdist --formats=gztar,zip# 安装
$ easy_install xxx.tar.gz

参数:

格式 后缀
zip .zip
gztar .tar.gz
bztar .tar.bz2
xztar .tar.xz
ztar .tar.Z
tar .tarzip_safe

文档: https://docs.python.org/3.6/distutils/sourcedist.html

  1. 构建二进制分发包
# exe 包
$ python setup.py bdist_wininst# rpm 包
$ python setup.py bdist_rpm# egg 包
$ python setup.py bdist_egg# 生成多个格式的进制包
$ python setup.py bdist

8、使用 setup.py 安装包

# 将模块安装至系统全局环境
$ python setup.py install# 在系统环境中创建一个软链接指向包实际所在目录
$ python setup.py develop# 卸载
$ python setup.py develop --uninstall
$ python setup.py develop -u

9、发布包到 PyPi
~/.pypirc 配置 PyPI 访问地址和账号

[distutils]
index-servers = pypi[pypi]
username:xxx
password:xxx
# 信息注册
$ python setup.py register# 上传源码包
$ python setup.py upload

也可以使用 twine 工具注册上传

python setup.py sdist bdist_wheel && twine upload dist/*

参考文章

  1. 花了两天,终于把 Python 的 setup.py 给整明白了
  2. Python 库打包分发(setup.py 编写)简易指南
  3. setup.py里的几个require

Python:打包配置文件 setup.py 详解相关推荐

  1. Python 中的 requirements.txt 与 setup.py详解

    转自:Deephub Imba 新手而言管理 Python 项目中的依赖项是非常具有挑战性的,这个问题是由历史原因引起的并且一直被吐槽. 在今天的文章中,我们将讨论如何正确管理 Python 项目的依 ...

  2. python打包安装-setup.py文件的使用(不能用pip安装时推荐)

    编写python的第三方库,最终要的一个工作就是编写setup.py了,其实如果我们下载过一些第三库的源代码文件,打开之后一般就会有一个setup.py,执行python setup.py insta ...

  3. python的setting怎么找_django项目的配置文件settings.py详解

    1.2.1 ABSOLUTE_URL_OVERRIDES:默认值:{} 一个字典映射"app_label_module_name"字符串到一个函数,该函数接收一个Model对象作为 ...

  4. dump文件_一种比Xml更敏捷的配置方式,Python Yaml 配置文件解析模块详解

    为什么选择Yaml Yaml的可读性好.扩展性好. Yaml和脚本语言的交互性好. Yaml使用实现语言的数据类型. Yaml有一个一致的信息模型. Yaml易于实现. Yaml试图用一种比Xml更敏 ...

  5. Python Django路由urls.py详解

    路由称为URL,是对可以从互联网上得到的资源位置和访问方法的一种简洁的表示,是互联网标准资源的地址.互联网上的每个文件都有一个唯一的路由,用于指出网络文件的路径位置.简单说,路由可视为我们常说的网址, ...

  6. 详解Python中的setup.py

    软硬件环境 ubuntu 18.04 64bit anaconda with python 3.6 setup.py 前言 科技发展到今日,软件开发已经变得越来越复杂,再也不是单单靠一个人的力量就能够 ...

  7. python打包和添加数据文件_python库打包分发setup.py编写指南

    python库打包分发setup.py编写指南 python之所以强大,在于有许许多多的人贡献自己的力量,他们将自己开发的项目打包上传至pypi,这使得python社区有取之不尽用之不竭的第三方库.工 ...

  8. Python 库打包分发(setup.py 编写)

    Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python 包.要想向 pypi 包仓库提交自己开发的包,首先要将自己的代码打包,才能上传分发. distutil ...

  9. 关于python中的setup.py

    关于python中的setup.py 2013-12-23 声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://lingxiankong.github.io/ 内容系本人及本人团队学 ...

最新文章

  1. phpstorm 点击方法跳转 后 返回 原来的位置
  2. libssh 认证绕过漏洞(cve-2018-10933)分析
  3. python 调用 so 库 需要注意的地方
  4. JAVA框架Struts2 Action类
  5. 【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法
  6. PHP的ob输出缓冲函数作用
  7. Git 通过源码编译安装 2.12.2 遇到的问题及解决
  8. C语言单片机中延时程序的实现
  9. C++: new是否进行初始化的问题
  10. 财务自由,一年赚500万,依然做社畜是什么感觉?
  11. nyoj 19 擅长排列的小明(深搜,next_permutation)
  12. 黄聪:php实现关键词高亮
  13. Hyper-V应用指南之5-导出、导入虚拟机
  14. 如何自动生成PDF书签
  15. Java观察者模式讲解及代码实现
  16. 无情胜有情, 谁都不是谁谁谁的偶然
  17. Neo4J 统计根节点、叶节点个数
  18. 1.毫米波雷达心率、呼吸原理实现(一)实例
  19. Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
  20. 如何将IE10降到IE9

热门文章

  1. Sams Teach Yourself Microsoft SQL Server T-SQL in 10 Minutes
  2. 快速排序-排序-数据结构和算法
  3. 计算机桌面任务栏过宽怎么处理,电脑任务栏变宽怎么还原
  4. ESXI命令行启动虚拟机
  5. 中文编程最高境界,不用编程,会用excel就会用,香不香?
  6. ArcMap安装与使用入门
  7. 循环的嵌套:输出6行,“*“数目与行号相同
  8. GD32F103时钟配置
  9. 【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器
  10. 小白安装Revit2021的Lookup和Manager文件步骤(附文件)