写过python的人都知道python最方便也最牛的地方就是它有无数的第三方lib可以直接拿来使用,可以让编写代码变的更容易。

长用的安装第三方lib的方法有easy_install和pip,这两个的使用方法大概差不多。这个不是本文要描述的重点,我就简单写两条:

easy_install

安装新包: easy_install install xxxx

卸载已安装的包:easy_install uninstall xxxx

更新已安装的包:  easy_install -U xxxx

pip

安装新包: pip install xxxx

卸载已安装的包:pip uninstall xxxx

更新已安装的包:  easy_install install xxxx -U

查看已安装的包:  pip list

用distutils制作自己的安装包

如何让自己写的包能被人当作第三方库安装呢?请看下面的例子:

mylib.py 文件

def add(x,y):
return x+y def division(x,y):
return x/y def mutiply(x,y):
return x*y def subtract(x,y):
return x-y def main():
pass if __name__ == '__main__':
main()

简单的方法可以进入到mylib.py存放的目录,然后import mylib就可以使用它提供的方法了。但是如果项目比较大,需要很多人协作的话,这样就非常不方便。这时候可以使用distutils标准库。于是我们可以在mylib.py同级目录下再创建一个setup.py,它的内容如下:

from distutils.core import setup

setup(name='mylib',
version='1.0',
py_modules=['mylib'],
)

name是指定的包名,version是版本号,py_modules里包含需要安装的python文件,本例中即为mylib.py文件。

编写好setup.py后,就可以使用

python setup.py install

把它安装到系统中了。安装完后我可以用 pip list 查看已安装的包的信息,并且在任何地方的python文件中都可以import mylib了。

使用pastescript自动创建项目

那么如何把自己的安装包上传到PyPI上,从而像其他安装包一样可以试用easy_install 或 pip安装呢?

这就需要遵循PEP241,给出足够的元数据才行,比如对包的描述,作者的信息,授权方式,主页等。需要一个非常复杂的setup.py文件,这时候可以自己手动写成下面的文件:

from distutils.core import setup
from setuptools import setup, find_packages setup(
name = 'mylib',
version = '0.0.1',
keywords = ('simple', 'test'),
description = 'just a simple test',
license = 'MIT License', author = 'jim',
author_email = 'jim@126.com', packages = find_packages(),
platforms = 'any',
)

然后运行下面的命令,生成一个mylib的包。最后把包含setup.py在内的这一级目录全部上传到PyPI上即可。

# 以下所有生成文件将在当前路径下 dist 目录中
python setup.py bdist_egg # 生成easy_install支持的格式
python setup.py sdist # 生成pip支持的格式,下文以此为例

有一个第三方库pastescript可以帮助我们自动创建这样一个复杂的文件,你只需要回答它的问题就可以了。

首先我们通过

pip install pastescript

安装 pastescript包,然后就可以使用下面的命令来自动创建一个复杂的setup.py包:

paster create -o mylib- -t basic_packge mylib

如果不想回答问题的话也可以提前编辑好配置文件config.cfg

[pastescript]
description = This is a test
license_name =
keywords = test mylib
long_description = I am mylib,a test lib for project
author = jim
author_email = jim@126.com
url = www.baidu.com
version = 1.0.0

然后使用命令行自动加载

paster create -t basic_package --config="config.cfg" mylib

共享安装包到PyPI上

上面搞定了安装包在本地的安装,那么下面开始把mylib共享到PyPI上,那么肯定需要一个PyPI的帐号,这个自己去注册吧。

然后进入到刚刚生成的mylib的目录下,运行

python setup.py  register

在系统中填写我们在PyPI上注册的信息,包括用户名、密码,并把这个包名注册到PyPI上。(请确保PyPI上没有同名的包)

完成后再执行

python  setup.py sdist upload

将代码上传到PyPI。

最后注意几点:

1. 上传到PyPI上的包很有可能用pip或easy_install下载失败,提示can not find a version satisfy request xxxxx. 原因是这个包生成的时候默认是当作dev的,所以不能release,于是要自己手动修改它自动生成的配置文件setup.cfg,把其中的tag_build = dev 改成 tag_build =

2. 经过试用后发现用pastescript生成的包符合PyPI的条件可以上传,但是它传上去的只是一个空的包,里面没有mylib.py这个文件,也许是需要用其他的参数生成包,而不是basic_packge;而自己用python setup.py sdist 生成的包则没有任何问题。

最简单的方法就是在生成包的时候使用python setup.py sdist --formats=zip,gztar,这样上面两个问题都不存在了

如何创建自己的python包的更多相关文章

  1. 利用docker创建包含需要python包的python镜像

    一.拉取python镜像 需要先安装docker,这里读者自行搜索docker的安装过程,下面我们拉取python镜像:以3.7.4为例 docker pull python:3.7.4 二.进入容器 ...

  2. Python包管理工具setuptools详解及entry point

    1.什么是setuptools? setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的.用户在使用setuptool ...

  3. 全面学习 Python 包:包的构建与分发

    首发于公众号:Python编程时光 1. 为什么需要对项目分发打包? 平常我们习惯了使用 pip 来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而 ...

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

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

  5. python 包(package)和模块(module)的创建和引入(import)

    python 包(package)和模块(module)的创建和引入(import) 名词解释 实际上,Python中的函数(Function).类(Class).模块(Module).包库(Pack ...

  6. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  7. python 包管理工具

    python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...

  8. Python 包管理工具解惑

    Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...

  9. Python包管理工具介绍

    常见的包管理工具及关系 setuptools -->distribute easy_install-->pip 1.distribute distribute是对标准库disutils模块 ...

随机推荐

  1. SpringBoot 统一响应格式

    -Spring Boot返回数据及异常统一封装 -企业实战之spring项目<接口响应体格式统一封装> -Spring Boot fastjson替换jackson -java web项目 ...

  2. 10个实用的Django建议(转)

    前言:随着Django1.4第二个候选版的发布,虽然还不支持Python3,但Django团队已经在着手计划中,据官方博客所说, Django1.5将会试验性的支持python3.Django 作为一 ...

  3. 修改lastpass主密码后需重启firefox才能加载已保存的站点密码或用导入工具

    最近索尼事件闹得沸沸扬扬,预防黑客先从升级密码开始.由于开发的需要一般是用firefox作为默认的浏览器,很早以前就装了lastpass密码管理器作为必备附加组件,在注册时按一下Alt+G就会帮你生成 ...

  4. UIImage添加滤镜

    UIImage *image =[UIImage imageNamed:"]; NSArray *arr = [NSArray arrayWithObjects:@"CISRGBT ...

  5. django 中的render和render_to_response()和locals()

    1. django中的render context在Django里表现为 Context 类,在 django.template 模块里. 它的构造函数带有一个可选的参数: 一个字典映射变量和它们的值 ...

  6. Andrew Ng-ML-第十六章-异常检测

    1.问题动机 图1.飞机发动机检测例子 对飞机引擎的例子,如果选取了两个特征x1热量产生度,x2震动强度.并得到如下的图,如果有一个新的引擎来检测其是否正常,x_test,那么此时如果点落在和其他点正 ...

  7. Android中Activity的四种开发模式

    Activity的四种启动模式:standard.singleTop.singleTask.singleInstance   清单文件中的Activity配置使用:android:launchMode ...

  8. Python OS模块重要知识点

    Python OS模块重要知识点 这几点很重要,主要是关于文件路径,我之前踩了很多坑,今天总结一下,方便以后能够避免与path相关的各种坑! 1,首先我们想获取某个文件夹下面的所有文件夹以及文件(不包 ...

  9. java的poi技术读取Excel数据

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  10. 树莓派3Braspberry pi 如何汉化显示中文教程

    树莓派默认是采用英文字库的,而且系统里没有预装中文字库,所以即使你在locale中改成中文,也不会显示中文,只会显示一堆方块.因此需要我们手动来安装中文字体. 好在有一个中文字体是免费开源使用的.ss ...