Anaconda入门使用总结


Posted in Python onApril 05, 2018

Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候。为了解决这些问题,有不少发行版的Python,比如WinPython、Anaconda等,这些发行版将python和许多常用的package打包,方便pythoners直接使用,此外,还有virtualenv、pyenv等工具管理虚拟环境。

个人尝试了很多类似的发行版,最终选择了Anaconda,因为其强大而方便的包管理与环境管理的功能。该文主要介绍下Anaconda,对Anaconda的理解,并简要总结下相关的操作。

Anaconda概述

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具。

这里先解释下conda、anaconda这些概念的差别。conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,所以也称为Python的一种发行版。其实还有Miniconda,顾名思义,它只包含最基本的内容——python与conda,以及相关的必须依赖项,对于空间要求严格的用户,Miniconda是一种选择。

进入下文之前,说明一下conda的设计理念——conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身!因此,conda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package并方便地切换。

Anaconda的安装

Anaconda的下载页参见官网下载,Linux、Mac、Windows均支持。

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

下载后直接按照说明安装即可。这里想提醒一点:尽量按照Anaconda默认的行为安装——不使用root权限,仅为个人安装,安装目录设置在个人主目录下(Windows就无所谓了)。这样的好处是,同一台机器上的不同用户完全可以安装、配置自己的Anaconda,不会互相影响。

对于Mac、Linux系统,Anaconda安装好后,实际上就是在主目录下多了个文件夹(~/anaconda)而已,Windows会写入注册表。安装时,安装程序会把bin目录加入PATH(Linux/Mac写入~/.bashrc,Windows添加到系统变量PATH),这些操作也完全可以自己完成。以Linux/Mac为例,安装完成后设置PATH的操作是

# 将anaconda的bin目录加入PATH,根据版本不同,也可能是~/anaconda3/bin
echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc
# 更新bashrc以立即生效
source ~/.bashrc

配置好PATH后,可以通过which condaconda --version命令检查是否正确。假如安装的是Python 2.7对应的版本,运行python --version或python -V可以得到Python 2.7.12 :: Anaconda 4.1.1 (64-bit),也说明该发行版默认的环境是Python 2.7。

Conda的环境管理

Conda的环境管理功能允许我们同时安装若干不同版本的Python,并能自由切换。对于上述安装过程,假设我们采用的是Python 2.7对应的安装包,那么Python 2.7就是默认的环境(默认名字是root,注意这个root不是超级管理员的意思)。

假设我们需要安装Python 3.4,此时,我们需要做的操作如下:

# 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)
conda create --name python34 python=3.4

# 此时,再次输入
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 remove --name python34 --all

# 安装好后,使用activate激活某个环境
activate python34 # for Windows
source activate python34 # for Linux & Mac
# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH

用户安装的不同python环境都会被放在目录~/anaconda/envs下,可以在命令中运行conda info -e查看已安装的环境,当前被激活的环境会显示有一个星号或者括号。

说明:有些用户可能经常使用python 3.4环境,因此直接把~/anaconda/envs/python34下面的bin或者Scripts加入PATH,去除anaconda对应的那个bin目录。这个办法,怎么说呢,也是可以的,但总觉得不是那么elegant……

如果直接按上面说的这么改PATH,你会发现conda命令又找不到了(当然找不到啦,因为conda在~/anaconda/bin里呢),这时候怎么办呢?方法有二:1. 显式地给出conda的绝对地址 2. 在python34环境中也安装conda工具(推荐)。

Conda的包管理

Conda的包管理就比较好理解了,这部分功能与pip类似。

例如,如果需要安装scipy:

# 安装scipy
conda install scipy
# conda会从从远程搜索scipy的相关信息和依赖项目,对于python 3.4,conda会同时安装numpy和mkl(运算加速的库)

# 查看已经安装的packages
conda list
# 最新版的conda是从site-packages文件夹中搜索已经安装的包,不依赖于pip,因此可以显示出通过各种方式安装的包

conda的一些常用操作如下:

# 查看当前环境下已安装的包
conda list

# 查看某个指定环境的已安装包
conda list -n python34

# 查找package信息
conda search numpy

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

# 更新package
conda update -n python34 numpy

# 删除package
conda remove -n python34 numpy

前面已经提到,conda将conda、python等都视为package,因此,完全可以使用conda来管理conda和python的版本,例如

# 更新conda,保持conda最新
conda update conda

# 更新anaconda
conda update anaconda

# 更新python
conda update python
# 假设当前环境是python 3.4, conda会将python升级为3.4.x系列的当前最新版本

补充:如果创建新的python环境,比如3.4,运行conda create -n python34 python=3.4之后,conda仅安装python 3.4相关的必须项,如python, pip等,如果希望该环境像默认环境那样,安装anaconda集合包,只需要:

# 在当前环境下安装anaconda包集合
conda install anaconda

# 结合创建环境的命令,以上操作可以合并为
conda create -n python34 python=3.4 anaconda
# 也可以不用全部安装,根据需求安装自己需要的package即可

设置国内镜像

如果需要安装很多packages,你会发现conda下载的速度经常很慢,因为Anaconda.org的服务器在国外。所幸的是,清华TUNA镜像源有Anaconda仓库的镜像,我们将其加入conda的配置即可:

# 添加Anaconda的TUNA镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# TUNA的help中镜像地址加有引号,需要去掉

# 设置搜索时显示通道地址
conda config --set show_channel_urls yes

执行完上述命令后,会生成~/.condarc(Linux/Mac)或C:\Users\USER_NAME\.condarc文件,记录着我们对conda的配置,直接手动创建、编辑该文件是相同的效果。

Anaconda具有跨平台、包管理、环境管理的特点,因此很适合快速在新的机器上部署Python环境。总结而言,整套安装、配置流程如下:

  • 下载Anaconda、安装
  • 配置PATH(bashrc或环境变量),更改TUNA镜像源
  • 创建所需的不用版本的python环境
  • Just Try!

cheat-sheet 下载:

Conda cheat sheet

参考资料

  • Anaconda Homepage
  • Anaconda Documentation
  • Conda Docs

用anaconda保证64位和32位的python共存

背景
喵哥想在MFC中调用python脚本,在原来的代码中包含一个只支持x86的库文件(超级核心的文件),原本安装的python是x64的,强行运行程序会出现python头文件里的函数无法解析的错误。考虑到anaconda可以方便的管理python版本,所以采用anaconda来安装32位的python。

Anaconda的一些命令

1.查看当前工作平台:conda info
 

(base) C:\Users\Catlin Cao>conda info
 
     active environment : base
    active env location : F:\Anaconda3
            shell level : 1
       user config file : C:\Users\Catlin Cao\.condarc
 populated config files : C:\Users\Catlin Cao\.condarc
          conda version : 4.5.11
    conda-build version : 3.15.1
         python version : 3.7.0.final.0
       base environment : F:\Anaconda3  (writable)
           channel URLs : https://repo.anaconda.com/pkgs/main/win-32
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/free/win-32
                          https://repo.anaconda.com/pkgs/free/noarch
                          https://repo.anaconda.com/pkgs/r/win-32
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/pro/win-32
                          https://repo.anaconda.com/pkgs/pro/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-32
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : F:\Anaconda3\pkgs32
                          C:\Users\Catlin Cao\AppData\Local\conda\conda\pkgs32
       envs directories : F:\Anaconda3\envs
                          C:\Users\Catlin Cao\AppData\Local\conda\conda\envs
                          C:\Users\Catlin Cao\.conda\envs
               platform : win-32
             user-agent : conda/4.5.11 requests/2.19.1 CPython/3.7.0 Windows/10 Windows/10.0.17134
          administrator : False
             netrc file : None
           offline mode : False

可见此时是64位平台。

2.切换64位和32位:set CONDA_FORCE_32BIT=1是切换到32位;set CONDA_FORCE_32BIT= 是切换到64位。

需要注意的是,这样切换环境对于已经安装的python没有任何影响,即原先是64位的python,现在还是64位,所以需要切换到32位后再安装python,并且安装需要在prompt下进行,在navigator里新建的python默认是64位的。

3.安装python:conda create -n env_name python=3.74,如果需要安装一些包,只需要在name后加上对应的包名称。conda create -n env_name numpy matplotlib python=3.74。

例如我们想安装python3.74 的32位版本

conda create -n python32 python=3.74

4.切换环境:conda activate env_name,conda deactivate env_name。

5.移除环境:conda remove -n env_name --all

6.安装包:activate env_name,conda install pandas。安装anaconda发行版的所有包:conda install anaconda,但是这样会在所有环境都执行这样的操作,所以需要指定安装环境:conda install -n env_name pandas

今天需要调用一个dll动态函数库,但是本地的python是64位的,dll是32位的,直接调用会报错。

OSError: [WinError 193] %1 不是有效的 Win32 应用程序。

 

python版本:3.6
anaconda对于python版本的管理还是很方便的,所以这里用anaconda才实现32位和64位python共存
1、打开anaconda prompt,输入 conda info ,可以看到现在用的是64位的。

Anaconda入门使用总结
2、切换成32位的 set CONDA_FORCE_32BIT=1 可以看出已经切换成32位的了
Anaconda入门使用总结
3、安装32位的python3.6 conda create -n python32 python=3.6
Anaconda入门使用总结
安装完成后在anaconda3文件夹下面会有一个envs文件夹
Anaconda入门使用总结
4、激活环境 conda activate python32 ,如果要取消 conda deactivate python32,如果要删除环境 conda remove -n python32--all
5、如果要在pycharm中使用该环境
Anaconda入门使用总结
点击add local
Anaconda入门使用总结
点击ok就行了

以上的操作都是在Anaconda Prompt里,其实用Anaconda图形界面(Navigator)安装python会更加直观,但是需要注意的是,无论你是否在Prompt里设置了32位的环境,用Navigator安装的python都是64位的,大家可以试一下,有异议欢迎留言交流。

Python 相关文章推荐
Python多线程编程(一):threading模块综述
Apr 05 Python
Django实现图片文字同时提交的方法
May 26 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Python中*args和**kwargs的区别详解
Sep 17 Python
python matplotlib拟合直线的实现
Nov 19 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
python如何基于redis实现ip代理池
Jan 17 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
浅析NumPy 切片和索引
Sep 02 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 #Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 #Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 #Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 #Python
python中返回矩阵的行列方法
Apr 04 #Python
python增加矩阵维度的实例讲解
Apr 04 #Python
python实现在pandas.DataFrame添加一行
Apr 04 #Python
You might like
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
php 高效率写法 推荐
2010/02/21 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
Python之reload流程实例代码解析
2018/01/29 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
python定时任务 sched模块用法实例
2019/11/04 Python
linux面试题参考答案(3)
2012/09/13 面试题
服务型党组织建设典型材料
2014/05/07 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
大学生暑假实习总结
2015/07/13 职场文书
初二数学教学反思
2016/02/17 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP