地址
PyPI
PyPI:Python Package Index
PyPI首页网址:pypi.python.org,基本上能在这上面找到所有的扩展包。
PyPI主要有两大类安装方法:
自行安装
- 从PyPI上下载的包解压后,都可以通过
python setup.py install
来安装。 - 这将把程序安装到site-package目录中,把脚本安装到Scripts目录中(Linux是bin目录)。
- 这种方式无法自动解决依赖关系。
- 从PyPI上下载的包解压后,都可以通过
通过工具安装
通过工具安装:常用的工具有两个:
- easy_install
- pip
easy_install 和 pip命令 :
- 安装:
easy_install packageName
- 安装:
easy_install package.egg
- 安装:
pip install packageName
- 更新:
pip install -U packageName
- 移除:
pip uninstall packageName
- 搜索:
pip search packageName
- 帮助:
pip help
- 安装:
easy_install和pip这两个工具安装的软件,都涉及到一个叫egg的东西。egg包是目前最流行的python应用打包部署方式。
setuptools
- setuptools 实际上提供了发布你自己的python package的功能
- 它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。
- 功能亮点:
- 利用EasyInstall自动查找、下载、安装、升级依赖包
- 创建Python Eggs
- 包含包目录内的数据文件
- 自动包含包目录内的所有的包,而不用在setup.py中列举
- 自动包含包内和发布有关的所有相关文件,而不是创建一个MANIFEST.in文件
- 自动生成经过包装的脚本或Windows执行文件
- 支持Pyrex,即在可以setup.py中列出.pyx文件,而最终用户无需安装Pyrex
- 支持上传到PyPI
- 可以部署开发模式,使项目在sys.path中
- 用新命令或setup()参数扩展distutils,为多个项目发布/重用扩展
- 在项目setup()中简单声明entry points,创建可以自动发现扩展的应用和框架
setup函数
- setup函数中大部分是描述性东西。
- 最主要的是package参数,可以手动列出所有的package,也可以用用自带的find_packages来动态获取package。
- setup函数包含的参数解释
–name 包名称————生成的egg名称
–version (-V) 包版本—-生成egg包的版本号
–author 程序的作者——包的制作者名字
–author_email 程序的作者的邮箱地址
–maintainer 维护者
–maintainer_email 维护者的邮箱地址
–url 程序的官网地址
–license 程序的授权信息
–description 程序的简单描述——-程序的概要介绍
–long_description 程序的详细描述—程序的详细描述
–platforms 程序适用的软件平台列表
–classifiers 程序的所属分类列表
–keywords 程序的关键字列表
–packages 需要处理的包目录(包含__init__.py
的文件夹)——-和setup.py同一目录下搜索各个含有 init.py的包
–py_modules 需要打包的python文件列表
–download_url 程序的下载地址
–cmdclass
–data_files 打包时需要打包的数据文件,如图片,配置文件等
–scripts 安装时需要执行的脚步列表
–package_dir 告诉setuptools哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {‘’: ‘lib’},表示“root package”中的模块都在lib 目录中。
–requires 定义依赖哪些模块
–provides定义可以为哪些模块提供依赖
–find_packages() 对于简单工程来说,手动增加packages参数很容易,刚刚我们用到了这个函数,它默认在和setup.py同一目录下搜索各个含有 init.py的包。
其实我们可以将包统一放在一个src目录中,另外,这个包内可能还有aaa.txt文件和data数据文件夹。另外,也可以排除一些特定的包
find_packages(exclude=[“.tests”, “.tests.“, “tests.“, “tests”])
–install_requires = [“requests”] 需要安装的依赖包
–entry_points 动态发现服务和插件
1 | from setuptools import setup,find_packages |
写好函数之后需要检查setup.py是否有错误或警告
1
python setup.py check
执行
python setup.py bdist_egg
即可打包一个test的包了。在当前目录下,会创建
dist
目录,里面有个文件名为demo-0.1-py3.7.egg
,这个就是可以分发的包。使用者拿到这个包后,解压,到demo-0.1目录下执行:
python setup.py install
,那么,foo.py就会被拷贝到python类路径下,可以被导入使用(如果安装是egg文件,会把egg文件拷贝到dist-packages目录下)。
执行sdist命令时,默认会打包哪些东西呢?
- 所有由
py_modules
或packages
指定的源码文件 - 所有由
ext_modules
或libraries
指定的C源码文件 - 由
scripts
指定的脚本文件 - 类似于test/test*.py的文件
- README.txt或README,setup.py,setup.cfg
- 所有
package_data
或data_files
指定的文件