如何创建自己的python包

写过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 = ‘[email protected]‘,

    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-2 -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 = [email protected].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 生成的包则没有任何问题。

时间: 2024-09-19 07:35:04

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

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

首发于公众号:Python编程时光 1. 为什么需要对项目分发打包? 平常我们习惯了使用 pip 来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而这个过程就是 打包. 打包,就是将你的源代码进一步封装,并且将所有的项目部署工作都事先安排好,这样使用者拿到后即装即用,不用再操心如何部署的问题(如果你不想对照着一堆部署文档手工操作的话). 不管你是在工作中,还是业余准备自己写一个可以上传到 PyPI 的项目,你都要学会如何打包你的项目. Pyth

[转载]Python 包管理工具解惑

原文链接:http://zengrong.net/post/2169.htm Python 包管理工具解惑 python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: 这几个包管理工具有什么不同? distutils setuptools distribute disutils2 distlib pip 什么时候该用pip,什么时候该用 setup.py ,它们有关系么? easy_install.ez_setup

Python包管理工具之间的关系

转自http://www.nowamagic.net/academy/part/13/302/ 当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils, 显得较为混乱. 而将来的工具链组合非常简单:pip + distutils2. 1. distutils : Python 自带的基本安装工具,适用于非常简单的应用场景,使用: 为项目创建 setup.py 脚本. 执行 setup.py install 可进行安装. 2.

web开发者最有用的10个Python包

Python最近成为了开发人员最喜欢的语言之一.无论你是专业的,业余的,还是一个初学者,你都可以从Python语言及其程序包中受益.Python已经被证明是当今最具活力的面向对象的编程语言之一.这就是为什么即使是世界顶级公司也广泛使用这种语言的原因.Python面向对象的设计非常干净,而且配备了令人难以置信的支持库.Python可以很容易地与其他流行的编程语言如Java,C和C ++集成. 这种语言的力量主要在于它的多功能包.无论你是寻找创建后台的支持,还是想设计一个CMS,这种语言可以提供帮助

Python包中__init__.py作用

在创建python包的过程中,IDE都会在包根目录下创建一个__init__.py文件,该Python文件默认是空的.目录结构如下: Pycharm下的package树结构: 在Finder中的目录结构: 从Finder中的目录就可以看出来,每个package实际上是一个目录(Directory),那么IDE是怎么识别它为package呢?没错,__init__.py的第一个作用就是package的标识,如果没有该文件,该目录就不会认为是package. Python中的包和模块有两种导入方式:

创建成功的Python项目

创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects,编译:Elaine.Ye 创建一个成功的开源Python项目所涉及的并不仅仅是编写有用的代码,与其相关的还有社区的参与.越来越多的合作机会.技艺以及支持等.探索最佳的做法有助于你创建出自己的成功项目. 开源Python项目的生态系统丰富多样,这使得您能够站在巨人的肩膀上来开发下一个开源项目.此外,

Python包管理工具Distribute的安装

Python包管理工具Distribute的安装 Python的包管理工具常见的有easy_install, setuptools, 还有pip, distribute,那麽这几个工具有什么关系呢,看一下下面这个图就明白了: 可以看到distribute是setuptools的替代方案,pip是easy_install的替代方案. Distribute提供一个安装python模块的框架.你系统的每一个python解释器都需要它自己的Distribute.你可以自己找到最新版本的Distribut

python 包

包 通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块.包目录下为首的一个文件便是 __init__.py.然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了. 在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这 里就需要运用包的概念了.包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文 件,主要是为了避免将文

Python 包管理工具解惑

Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: 这几个包管理工具有什么不同? distutils setuptools distribute disutils2 distlib pip 什么时候该用pip,什么时候该用 setup.py ,它们有关系么? easy_install.ez_setup