Python包和模块的分发详细介绍


Posted in Python onJune 19, 2020

发布Python包

上一篇介绍了如何使用别人的轮子,现在我们讨论下如何自己造轮子给别人用。

作为一个流行的开源开发项目,Python拥有一个活跃的贡献者和用户支持社区,这些社区也可以让他们的软件可供其他Python开发人员在开源许可条款下使用。这允许Python用户有效地共享和协作,从其他人已经创建的解决方案中受益于常见(有时甚至是罕见的)问题,以及可以提供他们自己的解决方案。

Pypi( Python Package Index) ,公共的模块存储中心

准备

distutils

官方库distutils,使用安装脚本setup.py来构建,安装包。2000年停止开发

setuptools

它是替代distutils 的增强版工具集,包含easy_install 工具,使用ez_setup.py文件,支持egg格式的构建和安装,提供查找,下载安装构建,发布,管理等包管理功能。setuptools是包管理的核心模块。

pip

目前包管理的事实标准,构建在setuptools之上,替代easy_install的,同样提供丰富的包管理功能、从Python3.4 开始之间包好在安装文件中。

wheel(轮子)

就光这个名字都如雷贯耳!有没有~

wheel格式定义在PEP427中wheel文件中不包含.pyc 文件提供bdist_wheel 作为seetuptools的扩展命令,这个命令可以用来生成新打包格式wheelpip 从1.4版本开始 提供了一个wheel子命令来安装wheel包,当然,需要先安装wheel模块。它可以让Python库以二进制形式安装,而不需要本地编译。

安装

python -m pip install setuptools wheel twine

至于为什么是Python -m pip 而不是 pip 可参看我的这篇blogpython -m pip

使用setup.py打包

下面 是 verify-python 项目的setup.py文件。

#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
__author__ = "monkey"

from setuptools import setup, find_packages

with open("README.md", "r") as fh:
 long_description = fh.read()

setup(name='verify-python',
 version='0.0.2', # 版本号
 description='An elegant verification code generator.', # 包的介绍
 author='BlackMonkey', # 作者 就是我啦~ 
 author_email='3213322480@qq.com', # 你的邮箱
 url='https://github.com/blackmonkey121/verify', # 项目地址,一般的填git地址 也可以是任意可用的url 不过我喜欢使用 git
 packages=find_packages(), # Python导入包的列表,我们使用find_packages() 来自动收集
 long_description=long_description, # 项目的描述 一般是 string 上文中定义了它
 long_description_content_type="text/markdown", # 描述文档 README 的格式 一般我喜欢MD. 也可以是你喜欢的其他格式 支不支持我就不知道了~ 估计HTML 是支持的
 license="GPLv3", # 开源协议
			# 这 需要去官网查,在下边提供了许可证连接 或者 你可以直接把我的粘贴走
 classifiers=[
 "Programming Language :: Python :: 3", 
 "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
 "Operating System :: OS Independent"],

 python_requires='>=3.3', # Python 的版本约束
			# 其他依赖的约束
 install_requires=[
 "itsdangerous>=1.1.0",
 "numpy>=1.11.3",
 "opencv-python>=3.4",
 "Pillow>=7.0",
 "rsa>=4.0", ]
 )

许可证获取

创建分发

# 生成分发文件
python setup.py sdist bdist_wheel

Python包和模块的分发详细介绍

如图在dist 下 存在两个文件

verify-python-0.0.2.tar.gz # 源码归档文件
verify_python-0.0.2-py3-none-any.whl # 内置的发行版文件

tar.gz文件是源归档,而.whl文件是 内置发行版。较新的pip版本优先安装内置发行版,但如果需要,将回落到源归档文件中。您应该始终上传源档案,并为项目兼容的平台提供内置档案。在这种情况下,我们的示例包在任何平台上都与Python兼容,因此仅需要一个内置发行版。

*.egg-info

应该是用来记录整个包的依赖和文件关系以及一些其他属性的东西,没有不影响包的使用,通常会在打包时生成。

分发

上传到Pypi 服务器上,可以是公有的Pypi服务器,也可以是公司或组织内私有的。
如果需要上传到公有服务器,需要注册账号注册

# 加密的上传
python3 -m twine upload dist/*

总结

到此这篇关于Python包和模块的分发的详细介绍的文章就介绍到这了,更多相关python包和模块分发内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
解决python2.7 查询mysql时出现中文乱码
Oct 09 Python
Python自动生产表情包
Mar 17 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
python3使用matplotlib绘制条形图
Mar 25 Python
python爬虫实现中英翻译词典
Jun 25 Python
python实现静态web服务器
Sep 03 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
python实现图像高斯金字塔的示例代码
Dec 11 Python
Python实现列表拼接和去重的三种方式
Jul 02 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 #Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 #Python
sklearn和keras的数据切分与交叉验证的实例详解
Jun 19 #Python
Python虚拟环境的创建和包下载过程分析
Jun 19 #Python
通过实例解析python创建进程常用方法
Jun 19 #Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 #Python
为什么是 Python -m
Jun 19 #Python
You might like
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
python实现感知器
2017/12/19 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
Django之form组件自动校验数据实现
2020/01/14 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
python构造IP报文实例
2020/05/05 Python
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
会计电算化专业自荐信
2014/03/15 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
资产移交协议书
2016/03/24 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
pandas数值排序的实现实例
2021/07/25 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers
介绍一下28个JS常用数组方法
2022/05/06 Javascript