近来已经习惯使用 Continuum Analytics 公司的Conda产品作为我的主要开发工具箱. Conda提供比隔离环境包 virtualenv 和 python 版本切换包 pyenv 更多, 本文就是带你进行基础环境的搭建和 miniconda(一个轻量级conda的发布包) 的使用.
Conda简介
先介绍一些名词:
- Continuum Analytics: 开发和发布 conda/miniconda/anaconda 包的公司.
- Conda: 命令行工具, 类似 pip 或者 virtualenv.
- Miniconda: conda 的一个轻量级的发布包, 只包含最基础的特性.
- Anaconda: 一个更丰富的conda包, 包含科学计算python用户的常用包, 这个包在miniconda上层.
Conda其实做的比简单的一个python版本切换和环境隔离的要多, 它就是它自己! 它是一个全新的包管理系统, 包资源库, 它可以管理更多. 在使用conda的同时你还是可以用pip来安装包, 本文就是做一些基础层级的使用的介绍.
安装
官网的安装介绍文档在这里
Conda支持各操作系统的安装, 这里演示安装miniconda, 到官网下载安装包, 在Mac平台下是一个shell文件, 在官网的下载地址里, 注意到有python 2 和python 3 的安装版本, 其实这个不太重要, 因为conda把python也当做是一个可安装的包, 你在安装好conda后依然可以切换python的版本.
下载好后直接执行这个文件
bash Miniconda-latest-MacOSX-x86_64.sh
替换 Virtualenv
Virtualenv 是一个帮你创建隔离环境的包, 在隔离环境里可以使用pip安装包. 同样的功能在conda中通过 conda create 和 conda env 两个命令来实现的.
创建隔离环境
要创建一个运行flask应用的环境:
conda create -n myflaskapp flask
上面这个命令会创建一个名叫myflaskapp的环境, 并且在里面安装好flask包. 要注意的是conda create命令要求在创建新环境的时候必须至少要指定一个要安装的包, 如果没有什么具体的包想指定的可以简单传入python就好了, 如下:
conda create -n myflaskapp python
运行好上面的命令, 你会看到如下的提示, 它教你如何激活和取消这个隔离环境:
# To activate this environment, use: # $ source activate myflaskapp # # To deactivate this environment, use: # $ source deactivate
用命令 source activate myflaskapp 激活环境后, 可以使用 conda list 命令来查看已经安装好的包:
(myflaskapp) $ conda list # packages in environment at /Users/kpurdon/miniconda/envs/myflaskapp: # openssl 1.0.1k 1 pip 7.1.0 py34_0 python 3.4.3 0 readline 6.2 2 setuptools 18.0.1 py34_0 sqlite 3.8.4.1 1 tk 8.5.18 0 xz 5.0.5 0 zlib 1.2.8 0
注意到上面第三列的 py34_0 所在的行才是安装好的python包, 其他的(python, readline, sqlite, tk, xz, and zlib)都不是python的包. 也可以通过 pip list 来查看安装好的python包.
(myflaskapp) $ pip list pip (7.1.0) setuptools (18.0.1)
安装包
Conda提供了完整的pip和pypi的替代, 但是你依然可以使用pip来正常安装包. 我们继续我们的flask例子, 我们依次使用pip和conda来安装.
pip install flask (myflaskapp) $ conda list # packages in environment at /Users/kpurdon/miniconda/envs/myflaskapp: # flask 0.10.1 <pip> itsdangerous 0.24 <pip> jinja2 2.8 <pip> markupsafe 0.23 <pip> openssl 1.0.1k 1 pip 7.1.0 py34_0 python 3.4.3 0 readline 6.2 2 setuptools 18.0.1 py34_0 sqlite 3.8.4.1 1 tk 8.5.18 0 werkzeug 0.10.4 <pip> xz 5.0.5 0 zlib 1.2.8 0
上面可以看到不是通过pip安装的已经移除了<pip>的标志, 说明这些包是从 anaconda.org 网站上下载的. 如果想知道包的具体渠道来源, 可以执行下面的配置命令:
conda config --set show_channel_urls yes
上面的命令会修改你的home文件夹下面的 .condarc 配置文件.
$ cat ~/.condarc show_channel_urls: yes
现在执行conda list就可以清楚的知道每个包的下载渠道, defaults是Continuum Analytics公司的官网渠道.
(myflaskapp) $ conda list # packages in environment at /Users/kpurdon/miniconda/envs/myflaskapp: # flask 0.10.1 py34_1 defaults itsdangerous 0.24 py34_0 defaults jinja2 2.7.3 py34_1 defaults markupsafe 0.23 py34_0 defaults openssl 1.0.1k 1 http://repo.continuum.io/pkgs/free/osx-64/openssl-1.0.1k-1.tar.bz2 pip 7.1.0 py34_0 defaults python 3.4.3 0 defaults readline 6.2 2 <unknown> setuptools 18.0.1 py34_0 defaults sqlite 3.8.4.1 1 http://repo.continuum.io/pkgs/free/osx-64/sqlite-3.8.4.1-1.tar.bz2 tk 8.5.18 0 http://repo.continuum.io/pkgs/free/osx-64/tk-8.5.18-0.tar.bz2 werkzeug 0.10.4 py34_0 defaults xz 5.0.5 0 defaults zlib 1.2.8 0 <unknown>
pip install vs conda install
pip install
- 优点
- Python 包的标准选择.
- 大多数包都先发布到这.
- 包几乎都是最新的版本.
- 缺点
- 安装科学计算包耗时太长, 经常还很多问题.
conda install
- 优点
- 和conda集成很好.
- 安装科学计算包很快很方便.
- 缺点
- 包的更新不如pip资源库那么及时.
- 有些在pip上的包在anaconda.org上没有.
创建 Requirements 文件
文件 requirements.txt 是virtualenv用来存储依赖相应版本的包的列表文件. Conda也有相应的文件, 叫做 environment.yaml, 我们能从一个conda环境中同时创建出两个文件. 如下的conda环境
(myflaskapp) $ conda list # packages in environment at /Users/kpurdon/miniconda/envs/myflaskapp: # flask 0.10.1 py34_1 defaults itsdangerous 0.24 py34_0 defaults jinja2 2.7.3 py34_1 defaults markupsafe 0.23 py34_0 defaults openssl 1.0.1k 1 http://repo.continuum.io/pkgs/free/osx-64/openssl-1.0.1k-1.tar.bz2 pip 7.1.0 py34_0 defaults python 3.4.3 0 defaults readline 6.2 2 <unknown> setuptools 18.0.1 py34_0 defaults sqlite 3.8.4.1 1 http://repo.continuum.io/pkgs/free/osx-64/sqlite-3.8.4.1-1.tar.bz2 tk 8.5.18 0 http://repo.continuum.io/pkgs/free/osx-64/tk-8.5.18-0.tar.bz2 werkzeug 0.10.4 py34_0 defaults xz 5.0.5 0 defaults zlib 1.2.8 0 <unknown>
创建 requirements.txt文件:
pip list > requirements.txt Flask (0.10.1) itsdangerous (0.24) Jinja2 (2.7.3) MarkupSafe (0.23) pip (7.1.0) setuptools (18.0.1) Werkzeug (0.10.4)
创建 environment.yaml文件:
conda env export > environment.yaml
替换pyenv
pyenv是一个让你在一个系统里可以在不同版本的python中安装和切换的包. 通过conda环境也是可以做到这一点的.
创建环境
conda create -n py3 python=3* conda create -n py2 python=2*
上面两个命令会创建分别安装python3和python2的环境. 我一般使用其中一个作为的默认环境, 并且把 source activate py3 命令加入我的启动项中, 在某个隔离环境中去执行我的python任务. 对于不同的项目我也会创建不同的隔离环境.
翻译自:
用 Continuum Analytics Conda 作为 virtualenv, pyenv 和其他的替代