Python包管理工具和多版本环境管理

时间:2022-09-01 12:52:55

1. Python包管理工具

在安装Python包的过程中,经常涉及到distutils、setuptools、distribute、setup.py、easy_install、easy_install和pip等等。突然对Python的包管理凌乱了,这些工具关系是什么,应该怎么去选择使用?

下面就简单介绍下Python包管理相关的一些内容。

1.1 distutils

distutils 是 python 标准库的一部分,这个库的目的是为开发者提供一种方便的打包方式, 同时为使用者提供方便的安装方式。我们经常使用的setup.py就是基于distutils实现的,然后通过setup.py就可以进行打包或者安装了。

看一个简单的例子,找一个目录创建两个文件foo.py和setup.py,内容如下:

1 # foo.py
2 def func():
3 print 'hello world!'
1 # setup.py
2 from distutils.core import setup
3 setup(
4 name='foo',
5 version='1.0',
6 author='winter',
7 author_email='winter@126.com',
8 py_modules=['foo'],
9 )

然后,在该目录中运行如下命令:

Python包管理工具和多版本环境管理

会创建dist文件和一个foo-1.0.zip压缩文件,使用者就可以解压缩这个包,然后执行python  setup.py install进行安装,然后就可以使用这个foo模块了。

Python包管理工具和多版本环境管理

关于更过如何编写setup.py的内容,请自行参阅Python官方文档中的setupscript部分

1.2 setuptools 和 distribute

setuptools 是对 distutils 的增强,尤其是引入了包依赖管理。我们可以通过ez_setup.py来安装setuptools。

至于distribute,它是setuptools的一个分支版本。分支的原因是有一部分开发者认为 setuptools 开发太慢。但现在,distribute 又合并回了 setuptools 中,所以可以认为它们是同一个东西。

前面看到setup.py可以创建一个压缩包,而setuptools使用了一种新的文件格式(.egg),可以为Python包创建 egg文件。setuptools 可以识别.egg文件,并解析、安装它。

1.3 easy_install

首先,不推荐使用,因为只能安装不能卸载

当安装好setuptools/distribute之后,我们就可以直接使用easy_install这个工具了:

1) 从PyPI上安装一个包:当使用 easy_install package 命令后,easy_install 可以自动从 PyPI 上下载相关的包,并完成安装,升级

2) 下载一个包安装:通过 easy_install package.tgz 命令可以安装一个已经下载的包

3) 安装egg文件:通过 easy_install package.egg 可以安装一个egg格式的文件

根据上面的分析,可以看到setuptools/distribute和easy_install之间的关系:

a)setuptools/distribute 都扩展了 distutils,提供了更多的功能

b)easy_install是基于setuptools/distribute的一个工具,方便了包的安装和升级

1.4 PIP

pip是目前最流行的Python包管理工具,它被当作easy_install的替代品,但是仍有大量的功能建立在setuptools之上。

easy_install 有很多不足:安装事务是非原子操作,只支持 svn,没有提供卸载命令, 安装一系列包时需要写脚本。pip 解决了以上问题,已经成为新的事实标准。

通过pip –help查看帮助文档,cmd下直接运行pip命令;

如果你对yum和apt-get比较熟悉,那么pip的命令会让你有种似曾相识的感觉;

pip常用命令集合:

1)安装包

pip install SomePackage        #从PyPI安装PyPI上最新的软件包
pip install SomePackage==1.0.4 #安装指定版本的软件包
pip install 'SomePackage>=1.0.4' #安装版本不能低于1.0.4
pip install ./downloads/SomePackage-1.0.4.tar.gz #本地安装
pip install http://my.package.repo/SomePackage-1.0.4.zip #从网上某个链接安装

还有一个根据依赖文件安装:

pip freeze > requirements.txt        # 使用pip导出依赖文件列表
pip install -r requirements.txt # 根据依赖文件列表,自动安装对应的软件包

2)升级包

pip list --outdated    #查看可升级软件包
pip install --upgrade SomePackage #升级软件包

3)卸载包

pip uninstall SomePackage

4)查询包

pip list    #查看已安装软件包
pip show --files SomePackage #查看软件包安装了哪些文件及路径等信息
pip search “query” #不知道要安装的软件包的具体名称,使用search命令进行查询,会列出相关的包

5)配置镜像源

pip的镜像地址默认在国外,速度比较慢,可以设置为国内镜像源

a)linux

修改 ~/.pip/pip.conf (Linux/Mac)

b)windows

C:\Users\当前用户名\pip\pip.ini(没有pip.ini就创建一个)

国内的可以配置成清华的镜像源,配置为:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

6)pip代理设置

pip install xxx --proxy=http://username:password@host:port

7)升级pip

有时在安装python包时会提示pip版本过低:

Python包管理工具和多版本环境管理

这时需要升级pip版本,执行如下命令

 pip install --upgrade pip -vvv

1.5 Conda包管理

说到conda,就必须要说到anaconda了;

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,拥有大量的用于科学计算的第三方库;

conda是anaconda的包管理和环境管理工具, 是 pip 和 vitualenv 的组合。强烈推荐

anaconda解决了Python开发者的两大痛点:

1)提供包管理,功能类似于 pip,Windows 平台安装第三方包经常失败的场景得以解决。

2)提供虚拟环境管理,功能类似于 virtualenv,解决了多版本Python并存问题。

安装时,会发现有两个不同版本的Anaconda,分别对应Python 2.7和Python 3.5,两个版本其实除了这点区别外其他都一样。后面我们会看到,安装哪个版本并不本质,因为通过环境管理,我们可以很方便地切换运行时的Python版本。

通过conda –help命令查看帮助

1)安装包

conda install -n python34 somepackage # -n 安装到指定环境;如果不用-n指定环境名称,则被安装在当前活跃环境;-c 指定通过某个channel安装

2)升级包

提示:pip只是一个包管理器,所以它不能为你管理环境。pip甚至不能升级python,因为它不像conda一样把python当做包来处理。但是它可以安装一些conda安装不了的包。

conda可以用来升级python,anaconda,conda,有木有感觉很强大

conda update -n python34 xxx        # 更新package
conda update conda # 更新conda,保持conda最新
conda update anaconda # 更新anaconda
conda update python # 更新python

3)删除包

conda remove -n python34 xxx

4)查询包

conda install xxxx    # 安装xxxx
conda list # 查看当前环境下已安装的包
conda list -n python34 # 查看某个指定环境的已安装包
conda search xxx # 查找package信息

5)修改镜像源

a)命令方式

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/        # 添加Anaconda的TUNA镜像,TUNA的help中镜像地址加有引号,需要去掉
conda config --set show_channel_urls yes # 设置搜索时显示通道地址

b)配置文件方式

修改 ~/.condarc (Linux/Mac) 或 C:\Users\当前用户名.condarc (Windows) 配置:

channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: yes

2. conda环境管理

2.1 conda多环境设置

主要用于解决多版本python共存的问题,同时针对不同的项目创建独立的开发环境;除了conda,其他主流的还有virtualenv和pyenv,但是我还是喜欢用conda

1)通过conda命令管理

# 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本),新的开发环境会被默认安装在目录~/anaconda/envs下。你可以通过-h指定一个其他的路径;如果我们没有指定安装python的版本,conda会安装我们最初安装conda时所装的那个版本的python。
conda create –name python34 python=3.4
# 安装好后,使用activate激活某个环境
activate python34 # for Windows
source activate python34 # for Linux & Mac
# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH
# 此时,再次输入
python--version
# 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境
# 如果想返回默认的python 2.7环境,运行
deactivate python34 # for Windows
source deactivate python34 # for Linux & Mac
# 复制一个环境
conda create -n pyhon34 --clone python34clone
# 删除一个已有的环境
conda remove –name python34 --all
# 查看已安装的环境,当前被激活的环境会显示有一个星号或者括号
conda info -e

activate和deactivate效果如下:

Python包管理工具和多版本环境管理

2)pycharm

非常简单

Python包管理工具和多版本环境管理

设置环境名字,存放的位置以及环境安装的python版本

Python包管理工具和多版本环境管理

2.2 偷偷盗取一篇很牛逼的博文

关于conda和anaconda不可不知的误解和事实——conda必知必会

2012年发布的跨平台包管理软件conda,是在数据分析界和Numpy和Scipy一样受欢迎的python工具。但是普通程序员平时只是会使用conda安装一些第三方包, 对它从哪里来,它是什么,和它要到哪里去所知甚少。今天我们就要讲一下关于conda和anaconda不可不知的误解和事实——conda必知必会的那些事实。

误解 #1:Conda是python的一个发行版,不是一个包管理器。

事实: Conda是一个包管理器;Anaconda才是一个python发行版。虽然conda是用Anaconda打包的,但是它们两个的目标是完全不同的。

软件发行版是在系统上提前编译和配置好的软件包集合, 装好了后就可以直接用。包管理器是自动化软件安装,更新,卸载的一种工具。Conda,有命令”conda install”, “conda update”, “conda remove”, 所以很明显, conda是包管理器。

再来说说, Anaconda 和 Miniconda. Anaconda发行版会预装很多pydata生态圈里的软件,而Miniconda是最小的conda安装环境, 一个干净的conda环境。

但是,conda和Anaconda没有必然关系, 你可以不安装Anaconda的同时, 使用conda安装和管理软件。

误解 #2: Conda是一个python包管理器

事实:Conda是一个通用的包管理器,当初设计来管理任何语言的包。所以用来管理python包当然也是绰绰有余。

$ conda search –canonical | grep -v ‘py\d\d’

这句命令可以帮你找出不是 pip和virtualenv可以管理的python包,而conda可以管理

误解 #3: Conda 和 pip 是直接竞争关系

事实:Conda pip 目标并不相同,只有小部分子集有交集有竞争关系:比如python包的安装和环境隔离。 

一句话就可以看出区别:

pip可以允许你在任何环境中安装python包,而conda允许你在conda环境中安装任何语言包(包括c语言或者python)。

如果我们只是关注python包安装,conda和pip也是为不同用户和不同目标定制的。如果你想在一个已有系统快速管理python包,那你应该选择pip,因为conda应该在conda环境中使用,而pip鼓励在任何环境中使用 。而如果,你想要让许多依赖库一起很好地工作(比如数据分析中的Numpy,scipy,Matplotlib等等)那你就应该使用conda,conda很好地整合了包之间的互相依赖。

误解 #4: 使用conda首先是不负责任并且会引起分歧的

事实Conda作者多年来用python标准创造conda只有在非常清晰合理的时候才使用其他工具。

你可能会问,我相信conda是遵循python标准的,但是它们为什么偏偏要撇开pip自己去造一套包管理器呢?为什么他们不直接去pip团队贡献想法呢?

事实上,一开始conda那伙人是想在pip社区贡献想法和代码的,但是像numpy,scipy这样对底层c库有复杂依赖的包管理需求,真的不多,所以社区不接受这样的不常有的需求。所以,他们只能自己去造conda包管理器了。

误解 #5: conda不能和virtualenv一起使用,所以它对我的工作没用

事实上你可以在virtualenv环境下安装conda但是最好用conda自己的环境工具这样会和pip有更好的兼容性

你可以在virtualenv里面安装conda:

$ virtualenv test_conda
$ source test_conda/bin/activate
$ pip install conda
$ conda install numpy

也可以在conda中造虚拟环境:

$ conda create -n yourenvname python=x.x anaconda
$ source activate yourenvname

误解 #6: 现在pip用wheels了,conda没什么用了

事实:wheels只是解决了conda试图克服的许多困难中的一个, conda二进制编排还是有很多wheels没有的优势 

wheels和conda都解决了预编译的代码安装问题(不仅仅是源代码安装)。但是wheel没有conda的依赖处理能力,wheels只能跟踪python代码的依赖关系,conda可以跟踪很多c代码的依赖关系,这为许多用numpy和scipy做科学计算优化的科学家省了不少心。

误解 #7: conda不是开源的;它是被盈利公司掌控的,如果有一天公司想收费了,那你就得付钱

Reality: conda (the package manager and build system) is 100% open-source, and Anaconda (the distribution) is nearly there as well.

Anaconda和conda都是standard BSD license开源标准。如果你还不放心,用pip install conda吧,这是完全开源的。

误解 #8: Conda 软件包本身都是闭源的吧?

事实: 虽然conda默认渠道没有完全开源,但是有一个社区牵头的conda-forge,它会推动conda的包和发行版完全开源。

误解 #9: 但是,如果Continuum Analytics公司倒闭,conda就不会存活了吧 ?

事实: conda没有和Continuum Analytics公司有很多牵扯;公司为社区免费提供支持服务,所有软件都有负责人,而不是公司全权负责。

误解 #10: 每个人都应该抛弃(conda | pip)去用(pip | conda) !

事实: pip conda 是为不同目的存在的,我们应该更加关注怎么同时用好这两个工具,而不是只用一个

Python包管理工具和多版本环境管理的更多相关文章

  1. Anaconda 包管理工具 conda 进行虚拟环境管理入门

    在基于 python 进行数据分析.机器学习等领域的实践和学习时,由于代码的更迭和更新,运行他人实现的代码或尝试安装新的工具库时往往需要指定特定版本的其他工具库,以满足特定环境的构建条件.而将同一工具 ...

  2. python 包管理工具

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

  3. Python 包管理工具解惑

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

  4. 转载:Python 包管理工具解惑

    Python 包管理工具解惑 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供m ...

  5. Python包管理工具小结

    此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身 ...

  6. python包管理工具他们之间的关系

    python包管理工具之间的关系 现在的python包管理工具有很多,非常混乱,必须理清他们之间的关系才能更好的使用python构建强大的包关系系统工具. 首先:python官方推荐的第三方库是PyP ...

  7. python 包管理工具 pip 的配置

    近几年来,python的包管理系统pip 越来越完善, 尤其是对于 windows场景下,pip大大改善了python的易用性. https://www.cnblogs.com/yvivid/p/pi ...

  8. Python包管理工具pip的基本使用

    1.简介 pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具. 2.pip安装 如果你安装的Python 2 >=2.7.9 或 ...

  9. Python | Pipenv官方推荐的python包管理工具

    原文地址:https://cloud.tencent.com/developer/article/1355672 Pipenv - 官方推荐的的python包管理工具. Pipenv是一款旨在将所有包 ...

随机推荐

  1. 老码农教你在 * 上谈笑风生

    作为一个高大上的码农,你肯定用到过 *,必须的.会有人否定这个断言么?那他恐怕不是真正的码农,或者说还没入门.* 对于码农的重要性,基本就和诸葛亮对刘备 ...

  2. TCP及IP报头及协议

    看到有道题目要问:tcp头多少字节?哪些字段?(必问) 这个... 看了这篇文章做参考:http://blog.163.com/tianshuai11@126/blog/static/61894543 ...

  3. js 书写规范

    1.字符串用单引号 2.运算符号和变量之间用空格建立间距 3.书写插件时使用 'use strict'; 开头 4.方法如果是获取或者设置数据集合则使用动词如  getData,setData,eac ...

  4. UVa 1572 (拓扑排序) Self-Assembly

    题意: 有n种正放形,每种正方形的数量可视为无限多.已知边与边之间的结合规则,而且正方形可以任意旋转和反转,问这n中正方形是否可以拼成无限大的图案. 分析: 首先因为可以旋转和反转,所以可以保证在拼接 ...

  5. Macro Substitution

    看<C程序设计语言>(英文版)学到的两个用法. 两个很简单的宏用法. #的用法: if, however, a parameter name is preceded by a # in t ...

  6. centos minimal Bind 主从服务器部署

    实验环境 两台虚拟机BindM和BindS,装的系统都是centos6.3 minimal   IP地址 主机名hostname 主DNS服务器 192.168.137.102 bindm.cas.c ...

  7. &lbrack;知了堂学习笔记&rsqb;&lowbar;纯JS制作《飞机大战》游戏&lowbar;第3讲&lpar;逻辑方法的实现&rpar;

    整体展示: 上一讲实现了诸多对象,这次我们就需要实现许多逻辑方法,如控制飞机移动,判断子弹击中敌机,敌机与英雄飞机相撞等等.并且我们在实现这些功能的时候需要计时器去调用这些方法.setInterval ...

  8. 基于 Java Web 的毕业设计选题管理平台--选题报告与需求规格说明书

    一.选题报告 目录 团队名称 团队成员 项目名称 项目描述 创新与收益 用户场景分析 真实用户调研 未来市场与竞争 项目导图 比例权重 总结 1.团队名称--指南者团队 2.团队成员 孔潭活:2015 ...

  9. 《A&period;I&period;爱》王力宏与人工智能谈恋爱 邀李开复来客串

    2017年9月19日下午,王力宏首张数字专辑<A.I.爱>亚洲发布会在北京举行,力宏在新歌MV中化身技术男,网红机器人Sophia扮新娘!和Robo Alpha机器人天团大跳舞蹈,与超跑酷 ...

  10. 如何获取堆的dump 的信息,如何分析

    获取方式: 1. jdk 自带启动参数 -XX:+HeapDumpBeforeFullGC -XX:HeapDumpPath=/x/x 产生dump日志,然后用visualVm分析 2. jmap 命 ...