PyPI教程
The Python Package Index, abbreviated as PyPI and also known as the Cheese Shop (a reference to the Monty Python's Flying Circus sketch Cheese Shop),[1][2] is the official third-party software repository for Python.[3] It is analogous to CPAN, the repository for Perl.[4] Some package managers, including pip, use PyPI as the default source for packages and their dependencies.[5][6] Over 113,000 Python packages can be accessed through PyPI.[7]
就是说PyPI(Python Package Index)是Python官方的第三方库,所有人都可以下载或上传Python库到PyPI。
0x02、流程
1、注册账号
想要上传自己的Python包没PyPI账号怎么行!官网地址
2、项目架构
1、项目环境:
- python3
- pip
- setuptools
- wheel
- twine
2、项目文件
如果想上传一个名为 "debug_world" 的Python包,那么她的项目文件如下:
-- packaging_tutorial # 项目名字
-- debug_world # 包名字
-- __init__.py # 一定要有init文件
-- print_str.py # 功能实现
-- __init__.py # 一定要有init文件
-- README.md # 一般记录具体使用方法
-- setup.py # 打包程序
print_str.py文件实现三个功能,代码如下:
def debug_world():
print('世界很美好,我去如此暴躁,这样不好不好')
def hello_world():
print('Hello, world')
def hello_python():
print('Hello Python\nPython 大法好')
setup.py文件代码如下:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="debug-world", # 包的分发名称,使用字母、数字、_、-
version="0.0.1", # 版本号, 版本号规范:https://www.python.org/dev/peps/pep-0440/
author="liheyou", # 作者名字
author_email="author@example.com", # 作者邮箱
description="PyPI Tutorial", # 包的简介描述
long_description=long_description, # 包的详细介绍(一般通过加载README.md)
long_description_content_type="text/markdown", # 和上条命令配合使用,声明加载的是markdown文件
url="https://github.com/", # 项目开源地址,我这里写的是同性交友官网,大家可以写自己真实的开源网址
packages=setuptools.find_packages(), # 如果项目由多个文件组成,我们可以使用find_packages()自动发现所有包和子包,而不是手动列出每个包,在这种情况下,包列表将是example_pkg
classifiers=[ # 关于包的其他元数据(metadata)
"Programming Language :: Python :: 3", # 该软件包仅与Python3兼容
"License :: OSI Approved :: MIT License", # 根据MIT许可证开源
"Operating System :: OS Independent", # 与操作系统无关
],
)
# 这是最简单的配置
# 有关详细信息,请参阅(https://packaging.python.org/guides/distributing-packages-using-setuptools/)
这里是最简单的配置,有关详细信息,请参阅打包和分发项目。
3、本地打包
确保pip,setuptools和wheel是最新的。
虽然pip就能够保证安装成功,但是最新的setuptools和wheel对安装有益无害。
While pip alone is sufficient to install from pre-built binary archives, up to date copies of the setuptools and wheel projects are useful to ensure you can also install from source archives:
python -m pip install --upgrade pip setuptools wheel
进入setup.py同级目录,然后运行打包程序
# 运行setup.py
python setup.py sdist
# 或者
python setup.py sdist bdist_wheel
此时项目会出现两个新文件:
4、上传PyPI
运行把Python包上传到PyPI的命令
pip install twine # 如果已经安装twine,跳过次步骤
python -m twine upload dist/*
# 接着会让你输入PyPI用户名和密码,注意不是邮箱和密码
# 出现下面信息说明成功,如有错误信息,检查setup.py配置信息
Uploading distributions to https://upload.pypi.org/legacy/
Uploading debug-world-0.0.1.tar.gz
100%█████████████████████████| 5.56k/5.56k [00:01<00:00, 3.98kB/s]
如果不想每次上传都输入账号和密码,可以创建用户验证文件 ** ~/.pypirc**
# 而且此方法不安全,容易泄露密码, 因为密码是明文
[distutils]
index-servers =
pypi
[pypi]
repository: https://upload.pypi.org/legacy/
username: <username>
password: <password>
然后就可以去PyPI官网查看你的包是否成功上传了
3、验证
PyPI推荐通过pip使用Python包
pip install debug-world
新建验证文件 verify_pypi.py
from debug_world import print_str
print(print_str.hello_world())
print(print_str.debug_world())
print(print_str.hello_python())
查看运行结果,说明成功了
Hello, world
世界很美好,我去如此暴躁,这样不好不好
Hello Python Python 大法好
4、删除版本
当想要删除某一版本的时候,只需在官网项目管理页面进行删除即可。
输入相对应的版本号。
0x03、注意事项
- 包名一定是别人没用过的
- 项目文件一定要有** init.py**
- 运行setup.py文件一定要同级目录
- 在上传PyPI的是时候输入的是用户名和密码,不是邮箱和密码
- 上传之后需要等一段时间,才能下载最新版本的包
- 更改包的时候一定要修改版本号
- pip 按照版本号安装,==前后没有空格
0x04、报错
HTTPError: 400 Client Error: File already exists: 版本号错误
HTTPError: 403 Client Error: Invalid or non-existent authentication information: 密码错误
error: invalid command 'bdist_wheel':
# 升级pip的安装工具setuptools
sudo pip install --upgrade setuptools
# 然后更新包
python -m pip install --upgrade pip setuptools wheel
0x05、参考
作者:DebugWorld
链接:https://www.jianshu.com/p/81fe5a5cd27a
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
PyPI教程的更多相关文章
- python资源合集
Python 官网: https://www.python.org/ Python2.7 doc: https://docs.python.org/2/ Python Package User Gui ...
- pip安装报错处理+PyPi源切换教程
一.pip安装出错类型 1.1 pip版本过旧导致不能安装 报错提示: You are using pip version 9.0.3, however version 10.0.1 is avail ...
- 在pypi上发布python包详细教程
使用Python编程中Python的包安装非常方便,一般都是可以pip来安装搞定:pip install <package name>,我们自己写的python也可以发布在pypi上,很简 ...
- 实战教程:如何将自己的Python包发布到PyPI上
1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
- windows下面安装Python和pip终极教程
在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个 人很喜欢Python的语言风格,但是这门语言对于windows并不算很友好,因为如果是初学者在windows环境下安装 ...
- [转]Scrapy入门教程
关键字:scrapy 入门教程 爬虫 Spider 作者:http://www.cnblogs.com/txw1958/ 出处:http://www.cnblogs.com/txw1958/archi ...
- 转: windows下面安装Python和pip终极教程
原文: http://www.cnblogs.com/yuanzm/p/4089856.html 因为如果是初学者在windows环境下安装,简直是折磨人,会遇到各种蛋疼的情况.本文希望提供傻瓜式的教 ...
- pip安装教程
首先你得安装了Python,这个网上教程大把. 关于pip的安装教程网上也很多,但是安装过程中遇到了很多问题. 我把安装pip需要的资源都放到云盘上了,直接下载就行,省得去找.(点我下载) 里面有两个 ...
随机推荐
- Word 分栏页码,一个页面两个不同页码的设置
1. 前言 在一些报纸.杂志中,我们可以见到各种各样的排版风格效果,其中有一种效果是一个页面设置了两栏,并且每栏下面都有不同的页码,那么,这种效果是如何实现的呢?这种页码在Word中默认页码样式中是没 ...
- Thinking In Java 4th Chap7 复用类
复用代码的两种方法:组合和继承 组合方法:(新类中产生现有类的对象) 没什么好说的,就是调用别类的对象而已 值得一提的是一个特殊方法:toString()当需要一个String却只有对象时能够自动调用 ...
- 使用redis和thread告警并避免重复告警
spring cloud使用redis 增加监控,微服务的监控体系特别重要,这里增加了告警(使用thread异步告警),同时不能短时间内不能重复告警(使用redis避免重复) 1.增加依赖 ...
- recover函数捕获异常
package main import ( //"fmt" "time" ) func test () { var m map[string]int m[&qu ...
- jenkins 打安卓包 cpu使用过高处理操作
登录两个控制台 打包开始后 在其中一台机器执行ps -ef |grep jenkins 找到执行打包的主进程复制pid 在另一个终端上执行 top -H -p pid 将最耗cpu的线程id转换为16 ...
- Python3 使用pygal 生成世界人口地图
最近在看<python从入门到实践>,其中有一个例子是使用pygal制作世界人口地图,觉得挺有意思的,这里就记录下来了, 其实代码不是很复杂,使用环境环境python3.废话不多说,直接上 ...
- 使用layer.open 父页面获取子页面输入文本框中的值
$(function () { $("#confirmpassword").click(function () { var pwd = $("#txtPwd") ...
- 【原创】大叔经验分享(87)marathon重启应用过程服务不可用
marathon提供多种健康检查方式 常用的有TCP和HTTP, TCP检查端口是否存在,存在则认为实例健康: HTTP检查指定URL的HTTP返回码,返回码正常(2xx.3xx)则认为实例健康: 这 ...
- 如何用SAP WebIDE的Fiori创建向导基于ABAP OData service快速创建UI5应用
如果我们手上已经有可以正常工作的OData服务,无论位于ABAP on-premise系统还是public上的internet OData service,都可以用SAP WebIDE里的Fiori创 ...
- flask自有转换器:int、float、path。默认string
flask自有转换器:int.float.path.默认string # 路由传递的参数默认当做string处理,这里指定int,尖括号中冒号后面的内容是动态的 # -*- coding: utf-8 ...