distutils、distutils2

distutils是 python 标准库的一部分,2000年发布。使用它能够进行 python 模块的 安装发布

distutils2 被设计为 distutils 的替代品,后来这个计划停滞了。

setuptools、easy_install、ez_setup.py

setuptools 是一个为了增强 distutils 而开发的集合,2004年发布。它包含了 easy_install 这个工具。

ez_setup.py 是 setuptools 的安装工具。ez 是 easy 的缩写。

使用方式:

  • 从 PyPI 上安装一个包:easy_install requests
  • 从网络文件安装(下载并安装):easy_install http://path/to/MyPackage-1.2.3.tgz
  • 从一个本地 .egg 格式文件安装:easy_install /path/to/MyPackage-1.2.3.egg

distribute 是 setuptools 的一个分支版本,后来又合并到了setuptools。

pip

pip 是目前 python 包管理的事实标准,2008年发布。它被用作 easy_install 的替代品,但是它仍有大量的功能建立在 setuptools 组件之上。

pip 希望不再使用 Eggs 格式(虽然它支持 Eggs),而更希望采用“源码发行版”(使用 python setup.py sdist 创建)。

pip使用方式:

  • pip 可以利用 requirments.txt 来实现依赖的安装。
  • 支持 git/svn/hg 等流行的 VCS 系统,可以直接从 gz 或者 zip 压缩包安装,支持搜索包,以及指定服务器安装等等功能。
  • pip 提供了一个 wheel 子命令来安装 wheel 包。需要先安装 wheel 模块。

setup.py vs requirements.txt

  • Python库:那些被开发并且为了其他人来使用而发布的东西,你可以在 PyPI 找到很多Python库。为了更好的推广和传播 自己,Python库会包含很多的信息,比如它的名字,版本号,依赖等等。而 setup.py 就是用来提供这些信息的。但是,并没有规定你可以从哪里获取这些依赖库。
  • Python应用:指你所要部署的一些东西,这是区别于我们之前所讲的Python库的。一个应用经常会有很多依赖,或许会很复杂。这些依赖里很多没有一个名字,或者没有我们说所的那些信息。这便反映了 pip 的requirements文件所做的事情了。每个依赖都标明了准确的版本号,一般一个Python库对依赖的版本比较宽松,而一个应用則会依赖比较具体的版本号。虽然也许跑其他 版本的 requests 并不会出错,但是我们在本地测试顺利后,我们就会希望在线上也跑相同的版本。执行pip install -r requirements.txt来安装。

setup.py

from setuptools import setup

setup(
name="MyLibrary",
version="1.0",
install_requires=[
"requests",
"bcrypt",
],
# ...
)

requirements.txt

# This is an implicit value, here for clarity
--index https://pypi.python.org/simple/ MyPackage==1.0
requests==1.2.0
bcrypt==1.0.2

从抽象到具体

上面这个requirements.txt文件的头部有一个 --index https://pypi.python.org/simple/ ,一般如果你不用声明这项,除非你使用的不是PyPI。然而它却是 requirements.txt 的一个重要部分, 这一行把一个抽象的依赖声明 requests==1.2.0 转变为一个具体的依赖声明 requests 1.2.0 from pypi.python.org/simple/

setup.py 中,也存在一个 install_requires 表来指定依赖的安装。这一功能除去了依赖的抽象特性,直接把依赖的获取url标在了setup.py里。Link

from setuptools import setup

setup(
# ...
dependency_links = [
"http://packages.example.com/snapshots/",
"http://example2.com/p/bar-1.0.tar.gz",
],
)

wheel

wheel 本质上是一个 zip 包格式,它使用 .whl 扩展名,用于 python 模块的安装,它的出现是为了替代 Eggs。

wheel 还提供了一个 bdist_wheel 作为 setuptools 的扩展命令,这个命令可以用来生成 wheel 包。

pip 提供了一个 wheel 子命令来安装 wheel 包。

setup.cfg 可以用来定义 wheel 打包时候的相关信息。

Python Wheels 网站展示了使用 Wheels 发行的 python 模块在 PyPI 上的占有率。

.whl文件下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/

总结

安装

  • Use pip to install Python packages from PyPI. Depending how pip is installed, you may need to also install wheel to get the benefit of wheel caching.
  • Use virtualenv, or pyvenv to isolate application specific dependencies from a shared Python installation.
  • If you’re looking for management of fully integrated cross-platform software stacks, consider buildout (primarily focused on the web development community) or Hashdist, or conda (both primarily focused on the scientific community).

打包

  • Use setuptools to define projects and create Source Distributions.
  • Use the bdist_wheel setuptools extension available from the wheel project to create wheels. This is especially beneficial, if your project contains binary extensions.
  • Use twine for uploading distributions to PyPI.

第三方库安装路径

Debian系的特殊路径:Link

dist-packages instead of site-packages. Third party Python software installed from Debian packages goes into dist-packages, not site-packages. This is to reduce conflict between the system Python, and any from-source Python build you might install manually.

就是说从源代码手动安装,将使用site-packages目录。第三方python软件安装到dist-packages目录,这是为了减少与操作系统版本的python的冲突,因为Debian系统的许多工具都依赖与系统版本的python。

查找 Python 安装路径

>>> from distutils.sysconfig import get_python_lib
>>> print(get_python_lib())

Links

python包管理(distutils、easy_install、pip、setup.py/requirements.txt、wheel)的更多相关文章

  1. python包管理-distutils,setuptools,pip,virtualenv等介绍

    python包管理-distutils,setuptools,pip,virtualenv等介绍 对于每个编程语言来说打包和发布开发包往往非常重要,而作为一个编程者能够快速容易的获得并应用这些由第三方 ...

  2. Python包管理工具setuptools之setup函数参数详解

    **********************************************************对所学内容的简单汇总******************************** ...

  3. Python包管理工具easy_install使用

    easy_install是python的包管理工具,可以方便的下载.安装.更新python包,并可以自动处理相关依赖.类似于ruby的gem,java的maven,nodejs的npm. 安装方法有两 ...

  4. 【Python系列】Python包管理器pip

    缘起 这段时间忙着给朋友搞事,忙了好长一段时间,木有写博客很长时间了.之间做了两个东西,一个是邮件自动发送脚本,一个是数据处理软件.其中,在做数据处理软件的时候使用到了非Python系统库,是两个第三 ...

  5. pip;python包管理工具

    刚开始学习Python时,在看文档和别人的blog介绍安装包有的用easy_install, setuptools, 有的使用pip,distribute,那麽这几个工具有什么关系呢,看一下下面这个图 ...

  6. 转: CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

    from: http://www.linuxde.net/2014/05/15576.html CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法 2014/05/ ...

  7. CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

    CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法如下: 截至包子写本文的时候,pip最新为 1.5.5 wget --no-check-certificate h ...

  8. python包管理之Pip安装及使用-1

    Python有两个著名的包管理工具easy_install.py和pip.在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装. pip可以运行在Uni ...

  9. python包管理之Pip安装及使用

    Python有两个著名的包管理工具easy_install.py和pip.在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装. pip可以运行在Uni ...

随机推荐

  1. 应用二:Vue之ElementUI Form表单校验

    (注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的)   表单校验是前端开发过程中最常用到的功能之一,根据个人的工作经验总结在此对表单校验功能的基 ...

  2. 「CorelDRAW降价提醒」,您关注的商品已降价!

    不管是“光棍节”还是“剁手节” 似乎和我都没有什么关系 事实证明,我错了 今天,早上竟然有不识趣的人发红包祝我单身快乐 纳尼,有没有搞错? 我能直接怼回去,说不领么? 但好像又不是我的风格 哎,一个红 ...

  3. Java中的自动转换

    特点: 1. 系统自动完成的,不需要程序员手动修改代码 2.将 取值范围小的类型 自动提升为 取值范围大的类型 注意: 整数类型直接写会默认为int  小数类型直接写默认为double 类型的范围大小 ...

  4. Python 3.8 新特性来袭

    Python 3.8 新特性来袭 Python 3.8是Python语言的最新版本,它适合用于编写脚本.自动化以及机器学习和Web开发等各种任务.现在Python 3.8已经进入官方的beta阶段,这 ...

  5. 什么是JSON ?

    JSON 实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  6. NOIP 膜你题 DAY2

    NOIp膜你题   Day2 duliu 出题人:ZAY     题解 这就是一道组合数问题鸭!!!  可是泥为什么没有推出式子!! 首先我们知道的是 m 盆花都要摆上,然后他们的顺序不定(主人公忘记 ...

  7. 何为JQuery对象?

  8. THUWC2019 划水记

    Day -2 在学校呆了inf天之后终于回家了! Day 0 在家无(tui)所(fei)事(mo)事(yu),顺便被拉出去剪了个头发,想写写thusc2017的题也写不动,一直在网上冲浪,到处乱翻以 ...

  9. 小结ajax中的同源和跨域 jsonp和cors

    网上的同源和跨域一般都比较复杂,最近也稍微总结了一下: 所谓同源,是浏览器的一种安全机制,作用在于保护网页数据的安全,不同源的网页之间不允许cookie dom ajax等行为 同源的条件:1.协议相 ...

  10. HDU1846 - Brave Game【巴什博弈】

    十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻.  今天,大家选 ...