学习地址:
撩课-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
网友评论