0%

Anaconda原理探究与环境操作指南

  1. 环境操作
    1. 添加环境
    2. 查看环境
    3. 修改环境中的python版本
    4. 复制环境
    5. 删除环境
    6. 重命名
    7. 激活和退出环境
  2. Anaconda文件夹及其原理说明
    1. python.exe在哪?pip在哪?
    2. 创建环境的时候怎么搜索已有的python?顺序是怎样的?找不到又要怎么办?
    3. 激活不同环境后使用python和pip有什么区别?
    4. 直接在Powershell中使用python和pip和在conda中使用有什么区别?
  3. Conda设置代理

环境操作

添加环境

1
conda create -n py35 python=3.5 anaconda

-n指定环境名,python=指定python版本,python=3.5+anaconda表示该环境中要安装或更新的包。

https://docs.conda.io/projects/conda/en/latest/commands/create.html

查看环境

1
2
conda env list
conda info --env

修改环境中的python版本

会替换掉原来的python.exe(在base环境中无法替换)。

1
conda install python=3.6

复制环境

1
conda create -n new_env --clone old_env

删除环境

1
conda remove -n py35 --all

重命名

先复制,再删除

激活和退出环境

1
2
conda active py35
conda deactive py35

Anaconda文件夹及其原理说明

安装Anaconda时,选用的python版本是3.8,Anaconda的安装路径为D:\Anaconda\anaconda3,python.exe作为默认环境base的解译器,保存在该目录下。

所有的包安装在pkgs文件夹下(Anaconda安装目录总的10.1个G,pkgs文件夹占了5.63G),不同版本用文件夹名称区分(如下图)。

image-20201211185356457

python.exe在哪?pip在哪?

默认环境base的python.exe在Anaconda的安装目录下(pip在路径Scripts下),不同环境下的python.exe在envs/环境名/目录下。如果你的电脑上本身安装了一个python(已经将其目录添加到环境变量path中),某个环境(base或者自建的)需要的python版本刚好和电脑上自带的版本一致,则不会在环境目录下安装python.exe,而是索引到电脑上已有的那个python文件夹去。

创建环境的时候怎么搜索已有的python?顺序是怎样的?找不到又要怎么办?

创建环境(包括安装Anaconda时自动创建的base环境)时,Anaconda心里面已经想好了要安装的python版本,然后这时候开始搜索环境变量path,如果找到了对应的版本,就会把python的安装路径保存下来,不会额外安装python。

如果找遍了环境变量发现没有python,则开始从网上下载安装,安装的位置就在环境所在的目录下(base环境的目录就是Anaconda的安装目录,其他环境的目录位于envs/环境名/

激活不同环境后使用python和pip有什么区别?

打开Anaconda Prompt,输入python -Vpip -V,结果如下。可以看出,由于之前我们指定python版本号为3.5创建了一个环境py35,当切换到这个环境后使用python和pip,发现其路径是Anaconda安装路径\envs\py35;切回到base环境,发现路径就是Anaconda安装路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(py35) C:\Users\whuls>python -V
Python 3.5.5 :: Anaconda, Inc.

(py35) C:\Users\whuls>pip -V
pip 10.0.1 from D:\Anaconda\anaconda3\envs\py35\lib\site-packages\pip (python 3.5)

(py35) PS C:\Users\whuls> conda env list
# conda environments:
#
base D:\Anaconda\anaconda3
py35 * D:\Anaconda\anaconda3\envs\py35

(py35) PS C:\Users\whuls> conda activate base
(base) PS C:\Users\whuls> python -V
Python 3.8.3
(base) PS C:\Users\whuls> pip -V
pip 20.1.1 from D:\Anaconda\anaconda3\lib\site-packages\pip (python 3.8)

这时候我们创建一个新的环境,命名为test(conda create -n test,不指定python版本),然后切换到这个环境下,运行python -Vpip -V,结果如下。可以看出,创建环境时,Anaconda搜索了环境变量path的值,发现了在我电脑的D:\python37存在一个可用的python版本,于是就把这个python拿来,作为新环境的python解译器(我愿称之为“省流大师”)。

1
2
3
4
5
(base) PS C:\Users\whuls> conda activate test
(test) PS C:\Users\whuls> python -V
Python 3.7.4
(test) PS C:\Users\whuls> pip -V
pip 20.2.3 from d:\python37\lib\site-packages\pip (python 3.7)

还有一个很有意思的现象,如果把环境变量path中的python路径删掉,使用conda create -n 环境名创建环境并激活后,无法找到python和pip,看来如果不指定python,conda默认不设置python,全凭环境变量处置。

Anaconda不建议将其安装目录添加到环境变量中,而如果电脑上也不愿意暴露出python的路径,避免pip安装混乱,则必须在创建环境时指定python版本号(如果不指定,使用conda create -n name python,会安装最新的python)。官方对create命令的参数有如下说明。(完整参数

1
conda create [-n ENVIRONMENT | -p PATH] [package_spec [package_spec ...]]

参数python=3.8pythonanaconda,都是package_spec,也就是要加到envs/环境名/下的包内容,如果省去了这个参数,直接conda create -n 环境名,则不会添加任何包,和普通的powershell没啥区别(只有用到conda install才会有所区别,但因为conda无法安装gluoncv,所以不用它)。

直接在Powershell中使用python和pip和在conda中使用有什么区别?

conda作为一个python版本管理工具,允许用户在不同环境下自由切换使用的python版本。如果在powershell中使用python,使用的是Windows环境变量path记录的第一个python路径下的python和pip,这里假设该路径为D:\Python37\。使用pip install命令安装的所有东西都会存放在同一个路径下的Scripts文件夹中(D:\Python37\Scripts)。

那么问题来了,有些代码对python的版本有要求,比如某些较老的代码需要python2.x;而有些代码必须在python3.5版本下运行,在python3.6或以上的版本运行就会报错。虽然可以将所有版本的python路径都添加到Windows的环境变量path中,但是在命令行或powershell中调用时,只会运行path中记录的第一个python,这就无法做到自由调用不同版本。

而在conda中,可以为一个环境指定一个python版本,不同版本的python保存在不同的路径下,由Anaconda统一管理路径,用户只需要切换环境就可以实现不同python版本的调用。

Conda设置代理

https://blog.csdn.net/tianshixingyu/article/details/80239317

C:\Users\xxx\下找到.condarc,添加代理服务器地址。

1
2
3
proxy_servers:
http: http://proxy.yourorg.org:port
https: http://proxy.yourorg.org:port