一、前言

由于项目需要将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的更多相关文章

  1. 上传python代码到pypi

    上传python代码到pypi 去pypi官网注册账号 在项目中添加setup.py # coding = utf-8 from setuptools import setup, find_packa ...

  2. Nexus上传python包

    参考 https://blog.csdn.net/m0_37607365/article/details/79998955 1.首先创建pypi仓库 其中,PyPI类的服务,支持三种: proxy,提 ...

  3. 在pypi上发布python包详细教程

    使用Python编程中Python的包安装非常方便,一般都是可以pip来安装搞定:pip install <package name>,我们自己写的python也可以发布在pypi上,很简 ...

  4. 实测Maven上传jar包到私服的方法归纳

    Hello,各位小伙伴大家好,我是小栈君.好久不见,最近因为工作的缘故,导致了更新变慢,但是小栈君也在积极的做素材的规划,毕竟学习知识点的归纳和提炼需要一定的时间. 所以还请大家多多见谅,下一期的分享 ...

  5. maven安装 maven上传jar包到库里面

    maven的安装与配置:http://pansanday.blog.163.com/blog/static/381662802012727103454743/ maven上传jar包到库里面: 将私有 ...

  6. (转)上传jar包到nexus私服

    场景:在使用私服Nexus时候经常需要上传jar包,但是对上传jar包的方式不是很熟悉,所以很有必要学习下. 1 通过网页上传 GAV Definition:选择GAV Parameters 输入JA ...

  7. Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】

    搭建私有服务器 前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找->私有仓库->中心仓库- 然而,我们的本地仓库常常没有想要的 ...

  8. Maven上传jar包到私服

    1.认证,在M2_HOME/conf/settings.xml配置用户名密码 <server> <id>releases</id> <username> ...

  9. maven上传jar包到nexus私服后的存放路径 以及 使用IDEA上传jar包的步骤

    maven上传jar包到nexus私服的方法,网上大神详解很多,那么上传后的jar包存放到哪里了呢? 在下使用nexus3.2.1版本,在本地搭建了私服,使用maven上传jar包.最后结果如下: 点 ...

随机推荐

  1. 【Lucene4.8教程之三】搜索

    1.关键类 Lucene的搜索过程中涉及的主要类有以下几个: (1)IndexSearcher:执行search()方法的类 (2)IndexReader:对索引文件进行读操作,并为IndexSear ...

  2. AngularJS如何给动态添加的DOM中绑定事件

    正常情况(即非动态插入 DOM 对象)下,ng-click 这样的指令之所以有效(即点击之后能调用注册在可见作用域里的方法),是因为 angular 在 compiling phase(编译阶段)将宿 ...

  3. ORACLE触发器和new、old特殊变量

    :new --为一个引用最新的列值;:old --为一个引用以前的列值; 这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而inse ...

  4. php 字符串

    <?php /* * 字符串输出 * echo() 输出多个或多个字符串 * print() 输出字符串 * printf()格式化输出字符串 * 字符串截取 * substr() 对字符进行指 ...

  5. mysql拒绝访问(Error 1044/1045)问题的解决

    遇到此问题 一般是权限问题 修改权限即可 然后用grant命令下放权限. GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'ro ...

  6. Python学习(二) 运行Python,编译Python

    无论windos还是Linux只要安装了python,配置好了环境变量,则在命令行输入python这个命令的时候就会进入交互模式.在这个模式下可以进行一些简单的python代码编写.退出可以使用exi ...

  7. 关于521(nyoj)

    关于521 点击这里 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去. 浏览网页的流年忽然看到了网上有 ...

  8. 轻松背后的N+疲惫——系统日志

    相信很多coder都有这样的癖好:“自恋”!!对自己编写的code总是那么的自信,自豪,Always believe it to be so perfect!! 不喜欢做单元测试(总觉得它就那样了能出 ...

  9. GDAL的RASTERIO功能

             为了能快速的显示大影像,最近一直在学习GDAL,GDAL确实是一个功能强大的开源库,其核心部分数据集和波段,下面这个图很详细的描述了它们之间的关系,还有其中的细节:     GDAL ...

  10. QNDTU外壳及开发板

        昨天从淘宝上淘来了个DTU外壳,翻出来之前的STM32开发板和GPRS模块开发板,今天准备复习一下开发板,把裸板跑起来.     晒一下装备:     两块开发板:           51n ...