学习地址:
撩课 - Python 大数据 + 人工智能 1
撩课 - Python 大数据 + 人工智能 2
撩课 - Python 大数据 + 人工智能 3
撩课 - Python 大数据 + 人工智能 4
撩课 - Python 大数据 + 人工智能 5
撩课 - Python 大数据 + 人工智能 6
撩课 - Python-GUI 编程 - PyQt5
1. 包和模块的高级操作
0. 文档地址
https://python-packaging.readthedocs.io/en/latest/minimal.html
1. 账号操作
注册账号
https://pypi.python.org/pypi
邮箱验证
https://pypi.org/manage/account/
备注
账号:
oneshunzi
密码:
你猜
2. 环境准备
1. setuptools 安装
https://pypi.python.org
搜索 setuptools
下载源码文件
解压后, 打开命令行工具, 切换当前目录为 setup.py 所在目录
cd xxx 目录
在命令行中执行命令
- python setup.py install
- python3 setup.py install
2. pip 安装
setuptools 安装完毕后, 会有一个安装脚本
easy_install
在命令行中执行
- easy_install pip
- easy_install-3.6 pip
3. wheel 安装
在命令行中执行
- pip install wheel
- python3 -m pip install wheel
4. twine 安装
功能作用
一个三方包
可以帮助我们上传库到 Pypi 平台
安装方式
- pip install twine
- python3 -m pip install twine
注意
安装的 Python 版本环境问题
3. 发布前准备
1. 创建一个项目
项目结构
项目名称
包名称
__init__.py
模块
模块
setup.py
作用
项目信息的配置文件
这个里面最重要的就是执行一个 setup 函数, 通过这个函数来指明信息
示例
- from distutils.core import setup
- setup(形参 1 = 实参 1, 形参 2 = 实参 2)
- from setuptools import setup
- setup(形参 1 = 实参 1, 形参 2 = 实参 2)
建议使用
参数说明
名称
name
例: name="sz-lib"
版本
version
例: version="1.0.0"
描述信息
description
例: description="this is a very niubi lib"
需要处理的包列表
packages
例: packages=["szlib"]
注意
可以使用 find_packages()
会自动帮我们检索包 (即包含__init__.py 的文件夹)
需要处理的单文件模块列表
py_modules
例: py_modules=["single_module"]
作者
author
例: author="Sz"
作者邮箱
author_email
例: author_email="123@qq.com"
长描述
long_description
会显示在 Pypi 的项目介绍中
例: long_description="这里的字符串可以是从 readme.rst 文件中读取进来的"
依赖的其他包
install_requires
例: install_requires=['requests>2.18']
Python 版本限制
python_requires
例: python_requires=">=3"
项目主页地址
url
例: url="https://github.com/wangshunzi/Python_code"
协议
license
例: license="MIT"
...
具体 setup.py 脚本文档
- https://docs.python.org/2/distutils/setupscript.html
- https://packaging.python.org/tutorials/distributing-packages/
- README.rst
概念
rst: reStructuredText
重新构建的文本
作用
可以使用特定的字符, 来描述文本的格式
Pypi 平台能够自动识别 long_description 字段中所写的这种格式的字符串
但是, 如果把字符串都写在 setup 函数的参数中, 会显得比较混乱, 所以, 一般把内容写在一个单独的 README.rst 文件中;
然后再 setup.py 文件中, 读取这个文件内容, 并赋值给 long_description 即可
文件内容编写
具体语法文档说明
http://zh-sphinx-doc.readthedocs.io/en/latest/contents.html
建议
使用 Pycharm 编辑, 别傻的不要不要的用记事本
Pycharm 中, 安装一个支持 rst 的插件, 这样的话就能够识别 rst 语法
案例
语法检测
有时候会发现, 写的 rst 文件, 无法在 Pypi 平台正常显示
原因
Pypi 上对于 rst 的解析器问题, 并不是 Sphinx
导致部分语法有一些差异
解决方案
先从本地对 long_description 进行验证
验证通过后, 再进行上传
步骤
安装库
pip install readme_renderer
执行命令
python3 setup.py check -r -s
补充
安装完相关库之后, 也可以使用 Pycharm 进行验证
注意
使用 setuptools 打包时, 会自动包含这个文件, 不需要在下面的 MANIFEST.in 文件中再次声明
反之, 使用 distutils 打包则不会自动包含, 需要在以下文件声明
LICENSE.txt
作用
声明库的一些使用责任等等
比如, 所有权归属, 别人是否可以对代码进行任何操作; 是否可以用于其他商业用途等等
文件内容获取地址
- https://choosealicense.com/
- MANIFEST.in
作用
当我们在打包一个项目的时候, 并非所有的文件都会被打包在目标包中
打包工具最终会把所有已经打包的文件生成一个叫做 MANIFEST 文件的列表清单
我们就可以通过 MANIFEST.in 告诉打包工具, 让其新增一些指定文件
例
- include README.rst
- include LICENSE.txt
具体官方文档
https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distribute
包含
include *.txt
递归包含
recursive-include examples *.txt *.py
修剪
prune examples/sample/build
这里是真正的包和模块
可选补充
重点, 必须有这个文件
注意: 命名建议
全部小写
多个单词以中划线 - 作为分割
不要使用_
pip 安装对_支持不是很好
不能和 Pypi 上已有的包名称重复
2. 编译生成发布包
在命令行工具中执行
1. 进入 setup.py 同级目录
cd xxx 目录
2. 执行
python3 setup.py sdist
生成源码压缩包
它包含 setup.py, 模块源文件, 数据文件等等
然后可以使用在任何平台上重新编译所有内容
--formats = 压缩格式 1, 压缩格式 2
python3 setup.py bdist
生成二进制发行包
不包括 setup.py
是某个特定平台和 Python 版本的一个存档
python3 setup.py bdist_egg
生成 egg 包
需要安装 setuptools
python3 setup.py bdist_wheel
生成 wheel 包
需要安装 wheel
python3 setup.py bdist_wininst
生成 Windows 下的安装文件
更多命令
python3 setup.py --help-commands
注意
以上生成的发布包, 已经可以进行本地安装
安装方式
带 setup.py 源码压缩包
方式 1
解压
进入同级目录
执行 python3 setup.py install
方式 2
pip install 压缩包
方式 3
easy_install 压缩包
二进制发行包
可以解压直接拷贝到指定目录
Windows 下的安装文件
双击按步骤安装
.egg 格式
easy_install xxx.egg
.whl 格式
- pip install xxx.whl
- easy_install xxx.whl
4. 发布过程
1. 在命令行中, 执行命令
twine upload 需要发布的目标包
注意
此时会提示输入用户名和密码
在 Pypi 注册过的
需要进行邮箱验证
2. 成功后
Pypi 网站
疑问
是否需要上传到其他几个安装源? 比如豆瓣?
不需要; 啥叫镜像? 如同照镜子的你, 你改变了, 镜子里面的内容会自动改变
专业解释就是; 镜像服务器会每隔一段时间自动和原服务器同步内容
图示
补充
测试发布
场景
在发布到正式平台前, 可以先发布到测试平台进行测试
避免污染正式平台环境
步骤
1. 到测试平台注册账号
2. 上传包时
正式平台命令
twine upload dist/xxx.whl
测试平台命令
twine upload --repository-url
5. 发布后使用
手动下载安装
- easy_install xx
- pip install xx
来源: http://www.jianshu.com/p/335a8546a0ed