这篇文章主要介绍了一下 setuptools 是什么,以及它的功能和特点,并且介绍了如何使用它来创建和安装使用自己的包,这篇文章仅仅讲了最基本的功能和用法,一些对于进阶的用法会在下篇文章中进行介绍。
我们通常所知道的 Python 分发工具是 Python distutils, setuptools 可以说是它的增强版,它能帮助我们更好的创建和分发 Python 的包,尤其是具有复杂依赖关系的包。对于开发者来说,能够更好的组织自己项目的分发和发布;对于用户来说,不需要安装 setuptools 也可以使用由它创建的包,只需要一个启动模块即可。
实现这样的的包管理机制主要由两部分构成:
它提供的内容包括:
distutils 仅仅适用于包,它无法定义包之间的依赖关系。但是 setuptools 通过添加一个基本的依赖系统以及许多相关功能,弥补了该缺陷。他还提供了自动包查询程序,用来自动获取包之间的依赖关系,并完成这些包的安装,大大降低了安装各种包的难度,使之更加方便。
setup() 函数中一一列举出来MANIFEST.in文件setup.py 中列出 .pyx 文件,而最终用户无须安装Pyrexsetup() 参数扩展distutils,为多个项目发布/重用扩展setup()中简单声明 entry points,创建可以自动发现扩展的应用和框架| 1 | sudo apt–get install python–setuptools |
安装 wget:
|
安装 setuputils:
|
新建一个 demo 目录
|
在目录下新建 setup.py 文件
| 1234567 | from setuptools import setup, find_packages setup(name = \’demo1\’,version = \’0.1\’,packages = find_packages(),) |
将该项目打包
|
这时我们查看该项目目录:
|
我们看到在 dist 目录中的就是生成的 egg 包,将其解压:
|
以上的程序是最简单的一个 setup.py 程序,如果想要发布到 PyPI 就需要参考官方给出的示例:
| 12345678910111213141516171819202122232425262728 | from setuptools import setup, find_packagessetup(name = \”HelloWorld\”,version = \”0.1\”,packages = find_packages(),scripts = [\’say_hello.py\’], # Project uses reStructuredText, so ensure that the docutils get# installed or upgraded on the target machineinstall_requires = [\’docutils>=0.3\’], package_data = {# If any package contains *.txt or *.rst files, include them:\’\’: [\’*.txt\’, \’*.rst\’],# And include any *.msg files found in the \’hello\’ package, too:\’hello\’: [\’*.msg\’],}, # metadata for upload to PyPIauthor = \”Me\”,author_email = \”me@example.com\”,description = \”This is an Example Package\”,license = \”PSF\”,keywords = \”hello world example examples\”,url = \”http://example.com/HelloWorld/\”, # project home page, if any # could also include long_description, download_url, classifiers, etc.) |
给包中添加内容
我们上边生成的 egg 是一个空的,没有实际的内容,现在我们来添加一些内容:
在项目目录新建一个目录:
|
新建 __init__.py,加入如下代码:
| 1234567 | #-*- coding:utf-8 -*- def test():print \”hello world!\” if __name__ == \’__main__\’:test() |
再次生成 egg 包:
| 1 | python setup.py bdist_egg |
查看 egg 包内容:
| 12345678910111213 | unzip –l demo1–0.1–py2.7.eggArchive: demo1–0.1–py2.7.eggLength Date Time Name———— —— |