Python包和模块的分发详细介绍
发布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
如图在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包和模块分发内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
- 分页解决方案 之 分页算法——Pager_SQL的思路和使用方法
- 让你的笔记本更快一点——我的笔记本的性能测试和虚拟硬盘(把内存当成硬盘)的使用感觉
- 分页解决方案 之 数据访问函数库——另类的思路、另类的写法,造就了不一样的发展道路。
- 分页解决方案 之 QuickPager的使用方法(在UserControl里面使用分页控件的方法)
- 分页解决方案 之 QuickPager的使用方法(URL分页、自动获取数据)
- 分页解决方案 之 QuickPager的使用方法(PostBack分页、自定义获取数据)
- QuickPager asp.net 分页控件、表单控件等自定义控件下载 和介绍 【2009.09.07更新】
- 分页解决方案 之 QuickPager的使用方法(PostBack分页、自动获取数据)
- 【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!
- 基于Docker环境中源码部署容器Nginx
- 使用Ansible playbooks快速构建etcd集群
- 使用系统内置script和scriptreplay命令来记录操作记录
- 【机器学习】我在面试机器学习、大数据岗位时遇到的各种问题
- 【机器学习】机器学习编程语言之争狼烟再起,Python称霸?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R海拾遗-shiny3
- Android开发者的Flutter入门(二)
- 听说你一读Spring源码就懵?我帮你把架子搭好了,你填就行!
- 机器学习感兴趣么?无监督的遥感图像分类感兴趣吗?来嘛!
- 仓库ERP管理系统(springboot)
- R海拾遗-shiny4
- Spring中眼见为虚的 @Configuration 配置类
- 微信6.6.7版本后图文分享无标题的分析
- GEO 数据挖掘-数据获得
- POI和EasyExcel-你还在为导入导出数据苦恼吗?
- geo数据挖掘-2
- 基于ssm的客户管理系统
- 牛逼哄哄的Spring是怎么被MyBatis给征服了?
- Flutter如何和Native通信-Android视角
- 面试问倒无数人的Spring事务问题,就被你这样说完了?