使用Python编程的都知道,Python的包安装非常的方便,一般都是可以pip来安装搞定:

sudo pip install <package name>

pip的安装请移步:https://pip.pypa.io/en/stable/installing/


最近因为项目上的需要,发布了一个自己的pypi Python包,这里我大致分享如何发布自己的Pypi包一般过程。

打包工作主要依赖python的一个叫setuptools的包来完成,在进行下面操作前请使用pip安装它:

sudo pip install setuptools

(这里面我都是假设你已经准备好你的代码,测试代码以及目录结构,加上我今天要分享的,就可以组成一个完整的python包)

  • 1. 第一步,就是到pypi(https://pypi.python.org/pypi)上注册自己的用户, 点击“Register”,填写自己的用户名,密码,邮件地址后,就成功了。

记住自己的用户名和密码,后面上传的时候要输入的

  • 2. 准备setup.py/setup.conf文件,它是放在你包的根目录的,这一步至关重要,包括要发布的包名字,版本,license,描述,特性(classifier)等等,下面是我自己包的一个setup.py文件的内容,基本上只需要在这个上面修改就行了,具体如下:

#!/usr/bin/env python
# coding=utf-8 from setuptools import setup, find_packages setup(
name='<项目的名称>',
version=<项目版本>,
description=(
'<项目的简单描述>'
),
long_description=open('README.rst').read(),
author='<你的名字>',
author_email='<你的邮件地址>',
maintainer='<维护人员的名字>',
maintainer_email='<维护人员的邮件地址',
license='BSD License',
packages=find_packages(),
platforms=["all"],
url='<项目的网址,我一般都是github的url>',
classifiers=[
'Development Status :: 4 - Beta',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Software Development :: Libraries'
],
)

需要注意的上面的字段:

  • version - 这个简单,就是包的发布的版本,可以直接写在这,也可以从其他地方引用过来。
  • long_description - 必须是rst(reStructuredText )格式的,因为这个里面的内容是显示在pypi包首页上,具体rst的语法可以参考:http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html

   我的long_description是同目录下的README.rst的内容,同时这个README也是我的github项目首页。

  • packages - 申明你的包里面要包含的目录,比如  ['mypackage', 'mypackage_test']  可以是这种使用我的示例,让setuptools自动决定要包含哪些包
  • install_requires - 申明依赖包,安装包时pip会自动安装:格式如下(我上面的setup.py没有这个参数,因为我不依赖第三方包:)):
    install_requires=[
'Twisted>=13.1.0',
'w3lib>=1.17.0',
'queuelib',
'lxml',
'pyOpenSSL',
'cssselect>=0.9',
'six>=1.5.2',
'parsel>=1.1',
'PyDispatcher>=2.0.5',
'service_identity',
]

3. 准备requirements.txt 和 test-requirements.txt,这个申明包的依赖包和跑自动化测试的测试依赖包,具体格式示例如下:

mock>=2.0.0
flake8>=3.2.1
eventlet>=0.19.0
nose2>=0.6.5
cov_core>=1.15.0
virtualenv>=15.1.0

以上是我的test-requirements.txt的内容,requirements.txt的格式个上面一样。

准备这个两个文件不是必须的。

但是,有了它们,用户可以自己手动安装依赖包

pip install -r requirements.txt

有了它们,结合tox等工具,可以非常方便的加入自动化测试。 

  • 4. 准备一个项目的README.rst文件,前面也提到了它的格式要求,第一次发包,可以直接copy别人的格式,这东西熟能生巧,多写就会了。

README的截图就不放了,以免广告嫌疑。有兴趣可以到参考http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html

  • 5. 准备好上面的步骤,一个包就基本完整了,剩下的就是打包了(cd到包的根目录):

可以使用下面命令打包一个源代码的包:

python setup.py sdist build

这样在当前目录的dist文件夹下,就会多出一个以tar.gz结尾的包了:

也可以打包一个wheels格式的包,使用下面的命令搞定:

python setup.py bdist_wheel --universal

这样会在dist文件夹下生成一个whl文件,

  • 6. 上传生成的包,可以使用setuptools,或者twine上传,推荐使用twine上次,因为使用setuptools上传时,你的用户名和密码是明文或者未加密传输,安全起见还是使用twine吧

# 上传source 包
python setup.py sdist upload
# 上传pre-compiled包
python setup.py bdist_wheel upload

使用twine上传,先安装twine

sudo pip install twine

twine upload dist/*

上次前都会提示你前面注册的用户名和密码。一切搞定,你的包现在可以通过pip在任何地方安装了。


后续

其实对于一个包,你要长久维护,自动测试肯定要加入,后面有时间再分享下如何使用tox的使用和与第三方CI的集成。

引用链接:

pypi详细教程: https://packaging.python.org/distributing

在Pypi上发布自己的Python包的更多相关文章

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

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

  2. 如何在Pypi上发表自己的Python库

    背景 最近兴趣使然写了几个Python库,也发布到了Pypi上,虽然没什么人下载,但自己在其他机器上用着也会很方便.这里我向大家介绍一下如何在Pypi上发表自己的Python库. 准备 注册账号 很显 ...

  3. 在npm上发布一个自己的包

    1.首先你要在npm上创建一个账号,这里需要输入邮箱的,注意激活邮箱否则无法publish自己的包 2.在本地创建一个文件夹,输入npm init初始化项目,这里是我使用npm init创建的pack ...

  4. 使用 twine 上传自己的 python 包到 pypi

    打包检查 python setup.py check 打包 python3 setup.py sdist build 上传 twine upload dist/* twine 安装: pip inst ...

  5. 如何将你自己的Python package发布到PyPI上

    零.前言 最近做了一个小工具,查询IP或者域名的归属地.做完之后想发布到PyPI上,这样大家就可以通过pip来安装了. 在发布的过程中遇到了一些问题,也学到了很多东西.记录到这篇文章中.希望对大家有所 ...

  6. 实战教程:如何将自己的Python包发布到PyPI上

    1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ...

  7. 将python包发布到PyPI和制作whl文件

    参考链接:wheel和egg的不同怎样将自己写的包传达到PyPi发布你自己的轮子 - PyPI打包上传实践PyPI官网上传包教程 wheel文件Wheel和Egg都是python的打包格式,目的是支持 ...

  8. 将自己写的Python代码打包放到PyPI上

    如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...

  9. 纯Python包发布setup脚本编写示例

    如果你有多个模块需要发布,而它们又存在于多个包中,那么指定整个包比指定模块可能要容易地多.即使你的模块并不在一个包内,这种做法也行的通:你可以告诉Distutils从根包(root package)处 ...

随机推荐

  1. Spring classPath:用法

    http://blog.csdn.net/xing_sky/article/details/8228305 参考文章地址: http://hi.baidu.com/huahua035/item/ac8 ...

  2. ListView 的三种数据绑定方式

    ListView 的三种数据绑定方式   1.最原始的绑定方式: public ObservableCollection<object> ObservableObj; public Mai ...

  3. V8引擎嵌入指南

    如果已读过V8编程入门那你已经熟悉了如句柄(handle).作用域(scope)和上下文(context)之类的关键概念,以及如何将V8引擎作为一个独立的虚拟机来使用.本文将进一步讨论这些概念,并介绍 ...

  4. Oracle中 Instr 这个函数

    http://www.jb51.net/article/42369.htm sql :charindex('字符串',字段)>0 charindex('administrator',MUserI ...

  5. Java连接数据库(mysql,sqlserver)

    犹记当年为了使用java程序连接mysql数据库花费一天时间,最后发现是没有导入外包,如今看来真的发现自己那时有点二,也怪我使用的教科书上没有说明这点(强行甩锅,哈哈).今天分享出来,,希望后者不因为 ...

  6. CardboardSDK-iOS 源码简单分析

    该项目地址: 地址 克隆地址为 https://github.com/rsanchezsaez/CardboardSDK-iOS.git 目前如果想在iOS设备上实现双目VR的功能,Google 已经 ...

  7. cordova调用本地SQLite数据库的方法

    第一篇技术博客,写下来和大家分享今天所学,其次自己也巩固一下. 整个下午的时间用来钻研如何用cordova调用移动端本地SQLite数据库.首先我并不是用eclipse来编程的,而是用cordova建 ...

  8. JS闭包深入理解(理解篇)

    看书的时候很是不明白为啥变量老是五,经过认真思考的出一下理解: function box() {   var arr = [];   for (var i = 0; i < 5; i++) {  ...

  9. Unity编程标准导引-3.2 MonoBehavior 组件父类重构

    本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 3.2MonoBehavior 组件父类重构 为了让我们的组件类用起来更方便,我们将上一节的 ...

  10. OSS.Social微信项目标准库介绍

    经过本周的努力,昨晚终于完成OSS.Social微信项目的标准库支持,当前项目你已经可以同时在.net framework和.net core 中进行调用,调用方法也发生了部分变化,这里我简单分享下, ...