上传python包到PyPI
一、前言
由于项目需要将API响应的XML内容解析成python对象,写了一个简单的xml转python的库,因为功能简单,细节处理也不好,文档也没有,没想也不好意思上传到pypi。
后来由于多个不同的独立的服务都需要这个转换功能,如果每个服务都把这个库放置于各自的目录下,维护起来很麻烦,才想到完善这个库,上传到PyPI,通过pip来统一管理。
二、创建账号
在PyPI正式站点和PyPI测试站点分别注册一个帐号,用于后面上传。为了便于记忆,我使用了相同的帐号和密码。
三、创建.pypirc配置文件
此文件主要用于上传包到PyPI时验证权限。在用户根目录下创建文件~/.pypirc,内容如下:
[distutils]
index-servers =
pypi
pypitest [pypi]
username:xxx
password:xxx [pypitest]
repository: https://testpypi.python.org/pypi
username:xxx
password:xxx
四、创建项目库
每个项目库下必须有一个setup.py文件,除此之外同样可以创建其他附加的如readme、license等用以项目描述和版权信息的文件。
可参考官方的说明文档:Creating a Source Distribution
下面以lazyxml库作为示例。
lazyxml项目库的结构
lazyxml/
|-- LICENSE
|-- MANIFEST.in
|-- Makefile
|-- README.rst
|-- demo
| |-- compat.py
| |-- dump.py
| |-- load.py
| `-- xml
| |-- dump-fp.xml
| |-- dump.xml
| |-- gbk.xml
| |-- namespace.xml
| `-- normal.xml
|-- docs
| |-- Makefile
| |-- changelog.rst
| |-- conf.py
| |-- index.rst
| |-- lazyxml
| | |-- builder.rst
| | |-- dump.rst
| | |-- dumps.rst
| | |-- index.rst
| | |-- load.rst
| | |-- loads.rst
| | `-- parser.rst
| `-- make.bat
|-- lazyxml
| |-- __init__.py
| |-- builder.py
| |-- parser.py
| `-- utils.py
`-- setup.py
项目文件说明
LICENSE
项目版权许可证说明
MANIFEST.in
打包时包含/排除指定规则的文件
Makefile
Makefile脚本简化操作
- help: 帮助
- install: 安装包
- pack: 打包
- upload: 打包上传到PyPI正式站点
- test: 打包上传到PyPI测试站点
- clean: 清理
README.rst
项目介绍说明
demo
样例目录 包含各种项目库api使用示例
docs
项目库Sphinx文档目录
lazyxml
源码目录
setup.py
包元信息文件
#!/usr/bin/env python
# -*- coding: utf-8 -*- from __future__ import with_statement import sys
if sys.version_info < (2, 5):
sys.exit('Python 2.5 or greater is required.') try:
from setuptools import setup
except ImportError:
from distutils.core import setup import lazyxml with open('README.rst') as fp:
readme = fp.read() with open('LICENSE') as fp:
license = fp.read() setup(name='lazyxml',
version=lazyxml.__version__,
description='Simple xml parse and build lib.',
long_description=readme,
author='Zonglong Fan',
author_email='lazyboy.fan@gmail.com',
maintainer='Zonglong Fan',
maintainer_email='lazyboy.fan@gmail.com',
url='https://github.com/heronotears/lazyxml',
packages=['lazyxml'],
license=license,
platforms=['any'],
classifiers=[]
)
五、打包上传到PyPI测试站点
打包、注册、上传一条命令完成:
python setup.py sdist --formats=gztar register -r pypitest upload -r pypitest
或者执行Makefile命令:
make test
六、打包上传到PyPI正式站点
在测试站点发现没有问题后,就可以打包上传到正式站点。
命令:
python setup.py sdist --formats=gztar register upload
或者
make upload
七、尾言
执行上述所有步骤后,没有出现问题的话,一个项目包就会上传到PyPI站点上面。
之后就可以到PyPI站点去查看上传好的包。
上传python包到PyPI的更多相关文章
- 上传python代码到pypi
上传python代码到pypi 去pypi官网注册账号 在项目中添加setup.py # coding = utf-8 from setuptools import setup, find_packa ...
- Nexus上传python包
参考 https://blog.csdn.net/m0_37607365/article/details/79998955 1.首先创建pypi仓库 其中,PyPI类的服务,支持三种: proxy,提 ...
- 在pypi上发布python包详细教程
使用Python编程中Python的包安装非常方便,一般都是可以pip来安装搞定:pip install <package name>,我们自己写的python也可以发布在pypi上,很简 ...
- 实测Maven上传jar包到私服的方法归纳
Hello,各位小伙伴大家好,我是小栈君.好久不见,最近因为工作的缘故,导致了更新变慢,但是小栈君也在积极的做素材的规划,毕竟学习知识点的归纳和提炼需要一定的时间. 所以还请大家多多见谅,下一期的分享 ...
- maven安装 maven上传jar包到库里面
maven的安装与配置:http://pansanday.blog.163.com/blog/static/381662802012727103454743/ maven上传jar包到库里面: 将私有 ...
- (转)上传jar包到nexus私服
场景:在使用私服Nexus时候经常需要上传jar包,但是对上传jar包的方式不是很熟悉,所以很有必要学习下. 1 通过网页上传 GAV Definition:选择GAV Parameters 输入JA ...
- Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】
搭建私有服务器 前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找->私有仓库->中心仓库- 然而,我们的本地仓库常常没有想要的 ...
- Maven上传jar包到私服
1.认证,在M2_HOME/conf/settings.xml配置用户名密码 <server> <id>releases</id> <username> ...
- maven上传jar包到nexus私服后的存放路径 以及 使用IDEA上传jar包的步骤
maven上传jar包到nexus私服的方法,网上大神详解很多,那么上传后的jar包存放到哪里了呢? 在下使用nexus3.2.1版本,在本地搭建了私服,使用maven上传jar包.最后结果如下: 点 ...
随机推荐
- Train Problem I
问题陈述: 杭州电子科技大学HANGZHOU DIANZI UNIVERSITY Online Judge Problem - 1022 问题解析: 栈(stack)的简单应用 代码详解: #incl ...
- JVM GC之一找出不可达对象并回收
JAVA运行时数据区域 1.程序计数器:当前线程所执行的字节码的行号指示器.一个处理器只会执行一条线程中的指令,为了线程切换后能回复到正确的执行位置,所以每条线程都需要一个独立的计数器.各条线程之间互 ...
- JS常见操作
//第一篇博文,希望大家多多支持 /***** BasePage.js 公共的 脚本文件 部分方法需引用jquery库 *****/ //#region 日期操作 //字符串转化为时间. functi ...
- QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样
在买来的控件(没有源码)的基础上,想加入QObject的一些特性,不得不多继承: class MyProgress : public CProgress, public QObject 但总是报错: ...
- TCP连接状态详解及TIME_WAIT过多的解决方法
上图对排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻地认识,不能只停留在一知半解之中.下面对这张图的11种状态详细解释一下 ...
- poj 3230 Travel(dp)
Description One traveler travels among cities. He has to pay for this while he can get some incomes. ...
- java中substring的使用方法
java中substring的使用方法 str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str ...
- UEditor用法
UEditor是百度的编辑器,界面美观,功能强大,用起来还不错. 详见该链接http://ueditor.baidu.com/ 一.下载 http://ueditor.baidu.com/downlo ...
- Iterator(迭代器模式)--(超市管理者)
这个Iterator就是收银台干的活. package patterns.actions.iterator; public interface IteratorList { boolean isEmp ...
- 关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究
我是以chrome浏览器做的研究. 先看一段代码: <script> window.addEventListener('DOMContentLoaded',function(){ var ...