如果你写了一个python库,想让别人快速使用你的库,最简单的方式就是使用python官方出品的库托管网站pypi了。

   pypi的全称是Python Package Index,是python的一个软件仓库。pypi可以帮助你找到和安装由社区开发和共享的python库。包的作者可以使用pypi来分发和共享其所开发的python库。如下图1是pypi的首页,可以看到pypi已经拥有近30w的用户以及超过16w的项目。


图1:pypi首页

   1.一般来说,你发布的库中需要有一个setup.py文件,该文件主要包括库的各种信息,比如描述,作者,依赖以及各个模块等等。setup.py的编写可以参考如下资料:

如果你的python项目比较复杂,包含了多个层级的复杂的模块,你可以参考下面的blog来编写setup.py的packages选项

附个人项目NetCloud的setup.py示例:

#!/usr/bin/env python
# coding=utf-8
from setuptools import setup setup(
name="NetCloud",
version="1.0.2",
description='''网易云音乐综合爬虫,可以实现:
1.对于网易云音乐评论以及用户信息的爬取,并且可视化展示;
2.支持模拟登录,提供包括音乐,歌手,歌单,dj等全方位的api支持''',
author='lyrichu',
author_email='lyrichu@foxmail.com',
url = "http://www.github.com/Lyrichu/NetCloud",
maintainer='lyrichu',
maintainer_email='lyrichu@foxmail.com',
packages=['netcloud.analyse','netcloud.crawler',
'netcloud.login','netcloud.util',
'netcloud.demo','netcloud.test'],
package_data={'netcloud.util': ['source/*']},
install_requires=[
'pycrypto',
'requests',
'pyecharts',
'pandas',
'jieba',
'wordcloud',
'scipy'
]
)

上面编写的setup.py中尤其需要注意的是packagespackage_data两个参数,这两个参数分别决定了python库模块的结构以及资源文件的打包。

   2.编写好了setup.py文件之后,可以使用

python setup.py install

命令将pyhton库安装到本地,但是如果需要将库上传到pypi进行托管的话,则需要将库代码以及资源文件进行统一打包,打包一般有多种打包格式,常见的有源码包(.tar.gz文件)和预编译跨平台包(.whl文件),源码包以及预编译包的打包命令如下:

# 源码包,这会得到一个.tar.gz的文件
python setup.py sdist build
# 预编译包,这会得到一个.whl的文件
python setup.py bdist_wheel --universal

   3.上传到pypi

在你上传打包文件到pypi之前,你应该先去注册一个pypi的账号。这个很简单,直接去官网注册就可以了。上传到pypi有两种方式:

  • 使用setuptools工具,具体命令如下:
# 上传源码包
python setup.py sdist upload
# 上传预编译包
python setup.py bdist_wheel upload

简单来说,相比setuptools,twine是一个更加安全和强大的pypi包发布工具,具体介绍和用法可以参考官方文档。

twine 上传到pypi的命令如下:

# 首先安装twine
sudo pip install twine
# 上传打包好的文件到pypi
twine upload dist/*

twine上传的过程中会提示你输入pypi的用户名和密码,直接按照提示输入即可。正常情况下你就可以成功发布你的pyhton库了。

发布完成之后,你就可以使用pip命令安装你自己的库了,你可以试着安装并测试一下你的库在本机是否可以正常工作。

python打包到pypi小结的更多相关文章

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

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

  2. Python打包文件夹的方法小结(zip,tar,tar.gz等)

    本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip ? 1 2 3 4 5 6 7 8 9 10 11 import os, zipfile #打包目录为zip文 ...

  3. Python包管理工具小结

    此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身 ...

  4. Python 打包的现状:包的三种类型

    英文 | The state of Python Packaging[1] 原作 | BERNAT GABOR 译者 | 豌豆花下猫 声明 :本文获得原作者授权翻译,转载请保留原文出处,请勿用于商业或 ...

  5. Python 打包——过去、现在与未来

    英文 | Python packaging - Past, Present, Future[1] 原作 | BERNAT GABOR 译者 | 豌豆花下猫 声明 :本文获得原作者授权翻译,转载请保留原 ...

  6. Python 打包中 setpy.py settuptools pbr 的了解

    背景 nova服务构建失败,报错: 'tests_require' must be a string or list of strings containing valid project/versi ...

  7. 上传python代码到pypi

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

  8. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  9. Python 打包和发布方法汇总

    以下主要Python打包汇总,作为学习备份: 一.使用python内部基础工具包Distutils打包程序 1. 在打包之前需要做的就是配置好安装脚本,一般为setup.py文件: 示例(setup. ...

随机推荐

  1. nginx 11个处理阶段 && nginx lua 8个处理阶段

    1. nginx 11 个处理阶段 nginx实际把请求处理流程划分为了11个阶段,这样划分的原因是将请求的执行逻辑细分,各阶段按照处理时机定义了清晰的执行语义,开发者可以很容易分辨自己需要开发的模块 ...

  2. lua的文件管理

    lua没有自己的文件管理 只有读取和写入文件,但是可以通过调用lfs(LuaFileSystem),lfs是一个 用于lua进行文件访问的库,支持lua5.1和lua5.2,并且跨平台 lfs的使用: ...

  3. hdu3339In Action(最短路+01背包)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=259#problem/H Description Since 1945, whe ...

  4. openstack 部署笔记--dashboard

    控制节点 # yum install openstack-dashboard # vim /etc/openstack-dashboard/local_settings OPENSTACK_HOST ...

  5. Apache下设置网站目录的访问权限

    禁止用户对某一个目录及目录下文件的访问,仅允许本地访问 <Directory "/wwwroot/cert/"> Require local </Director ...

  6. SQL 中单引号 和一些特殊字符的处理

    为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在Java中就是用 ...

  7. Hive 大数据倾斜总结

    在做Shuffle阶段的优化过程中,遇 到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些 Counters得出 ...

  8. IO(字符流)

        1. 由于Java采用16位的Unicode字符,因此需要基于字符的输入/输出操作.从Java1.1版开始,加入了专门处理字符流的抽象类Reader和Writer,前者用于处理输入,后者用于处 ...

  9. Django popup示例

    urls.py urlpatterns = [ url('popup_test1',views.popup_test1), url('popup_test2',views.popup_test2), ...

  10. bzoj1660 / P2866 [USACO06NOV]糟糕的一天Bad Hair Day

    P2866 [USACO06NOV]糟糕的一天Bad Hair Day 奶牛题里好多单调栈..... 维护一个单调递减栈,存每只牛的高度和位置,顺便统计一下答案. #include<iostre ...