如何将你自己的Python package发布到PyPI上
零、前言
最近做了一个小工具,查询IP或者域名的归属地。做完之后想发布到PyPI上,这样大家就可以通过pip来安装了。
在发布的过程中遇到了一些问题,也学到了很多东西。记录到这篇文章中。希望对大家有所帮助。
一、准备工作
首先需要在PyPI网站上注册一个帐号,这样才能上传自己的package。
打开PyPI首页,可以看到右上角有Register按钮,点击:

之后填写必要的信息,然后到邮箱点击激活邮件中的链接就可以了。
注意:密码需要包含字母、数字,或者长度超过16位。
注册好帐号之后,我们就可以开始将自己的package标准化了。
二、标准化
标准化其实是我自己起的名,具体的意思就是将自己的package修改成可以在PyPI上发布需要的过程。
标准化主要是添加一些文件,比如更新记录,readme等等。
具体的可以参考这篇文章,我这里简单的记录一下流程:
- 修改目录结构,最起码要在根目录下添加一个__init__.py。
- 如果没有可执行脚本,比如只用于import,那么不需要bin/文件夹。
- 创建一个CHANGES.txt,记录版本更新内容。
- 如果有文档,放到docs文件夹中。
- 创建LICENSE.txt文件,内容是开源协议。
- 创建MANIFEST.in文件,这个文件的作用是告诉PyPI要包含什么文件。因为像txt这样的文件默认是不包含的。
- 创建README.txt,写一些package的介绍。
- 创建setup.py文件,这个是最重要的。
着重说一下最后一步,创建setup.py文件。
from distutils.core import setup setup(
name='TowelStuff',
version='0.1.0',
author='J. Random Hacker',
author_email='jrh@example.com',
packages=['towelstuff', 'towelstuff.test'],
scripts=['bin/stowe-towels.py','bin/wash-towels.py'],
url='http://pypi.python.org/pypi/TowelStuff/',
license='LICENSE.txt',
description='Useful towel-related stuff.',
long_description=open('README.txt').read(),
install_requires=[
"Django >= 1.1.1",
"caldav == 0.1.4",
],
)
这是非常简单的一个例子,下面说一下各项的作用。
name:package的名字
version:版本号
author:作者
author_email:作者的邮箱
packages:这个是package内包含的所有package,对于一个小package来说,就是包含它本身
scripts:可执行脚本,如果没有就省略这项
url:项目的链接,可以链接到github上
license:开源协议的名称
description:简单的项目描述
long_description:详细描述,这里是直接把README.txt的内容读了进来
install_requires:依赖项目,这个如果不会写可以用pip freeze > requirements.txt来查看一下系统中已有package,参考这个格式就行。
三、上传
文件都创建好之后,就是上传了。
首先我们运行
$ python setup.py register
选择1,输入用户名和密码,这样就会在PyPI上注册这个项目了。
注册好之后,实际上还没有上传文件,我们接着运行
$ python setup.py sdist upload
这条命令其实做了两件事,第一件是生成tar.gz文件,第二件是上传到PyPI上。
执行完成之后就搞定了,我们可以运行一下pip install看看是否可以成功安装。
如何将你自己的Python package发布到PyPI上的更多相关文章
- 实战教程:如何将自己的Python包发布到PyPI上
1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ...
- 如何将Python项目发布到PyPI
The Python Package Index (PyPI) is a repository of software for the Python programming language. 如何打 ...
- 将python包发布到PyPI和制作whl文件
参考链接:wheel和egg的不同怎样将自己写的包传达到PyPi发布你自己的轮子 - PyPI打包上传实践PyPI官网上传包教程 wheel文件Wheel和Egg都是python的打包格式,目的是支持 ...
- 将自己写的Python代码打包放到PyPI上
如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...
- 在pypi上发布python包详细教程
使用Python编程中Python的包安装非常方便,一般都是可以pip来安装搞定:pip install <package name>,我们自己写的python也可以发布在pypi上,很简 ...
- python: 模块发布
一.准备发布 1.为模块文件创建一个文件夹,并将模块文件复制到这个文件中(一般,文件夹的名字和模块的名字一样) 2.在文件夹中创建一个名为『setup.py』的文件,内容如下: #encoding:u ...
- 如何在Pypi上发表自己的Python库
背景 最近兴趣使然写了几个Python库,也发布到了Pypi上,虽然没什么人下载,但自己在其他机器上用着也会很方便.这里我向大家介绍一下如何在Pypi上发表自己的Python库. 准备 注册账号 很显 ...
- 快速构建CLI程序并发布到PyPi
构造一个简单的CLI程序 typer 这个从去年就被各种营销号吹成Web框架的 第三方库, 与 FastAPI 同出一人之手,它不是Web框架,它是一个用来构建CLI程序的库,我们就简单搞个例子 # ...
- 【转】发布python的包至pypi服务器
[原文链接]http://yejinxin.github.io/distribute-python-packages-to-pypi-server/ 使用pip或easy_install可以管理和安装 ...
随机推荐
- HDU 4596 Yet another end of the world (数学,扩展欧几里德)
题意:给出n组x,y,z.判断是否存在一个id使得id%x1∈(y1,z1),id%x2∈(y2,z2). 析: 设 id/x1=a , id/x2=b ,则 id-a*x1=u; (1) id- ...
- Linux device tree 简要笔记
第一.DTS简介 在嵌入式设备上,可能有不同的主板---它们之间差异表现在主板资源不尽相同,比如I2C.SPI.GPIO等接口定义有差别,或者是Timer不同,等等.于是这就产生了BSP的一个 ...
- WinSock异步IO模型之Select
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的. Windows操作系统提供了五种I/O模型,分别是: ■ 选择(select): ■ 异步选择(WSAAsyncSelec ...
- 远程调用WMI安装软件
Invoke-WMIMethod -ComputerName $ip -Credential $cred -path Win32_product -Name Install -ArgumentLi ...
- HDU 4286 Data Handler 双向链表/Splay
Data Handler Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- C#缩放和裁剪图片
在GDI+中,缩放和剪裁可以看作同一个操作,无非就是原始区域的选择不同罢了.空口无凭,先看具体算法可能更好理解. using System; using System.Collections.Gene ...
- ANativeWindow是个什么东西
公司经常组织一些培训,培训的都是些奇技淫巧.什么设计模式啦,开发策略啦,git啦,repo啦,另外就是培训一些开发流程的东东,例如CMMI啦.可是,却忘记了,程序员终究要归结到三个问题上: 1.解决什 ...
- wp上一款应用的出生与死亡
起因 因为自己买了个wp手机,所以对于微软的这个wp系统还是非常喜欢,无奈软件质量不高,过年前便买了个wp的开发者帐号,不是很贵,还想着为wp的生态系统做点贡献.无奈工作繁忙,一直没有机会去做.但是自 ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 对cocos2d 之autorelease\ratain\release的理解
前言: 三种情况,引出问题 new出来的对象需要释放,而释放时,如果有其他人引用了这个对象,再次使用这个对象时,则会导致无效指针报错. 于是有了引用计数的施放管理机制. 对 ...