前言

一个小小的硬盘崩溃,给我带来了相当大的麻烦,重置了系统之后,注册表与c盘除了用户文件夹的东西都没了,导致一些应用根本打不开,也无法被控制面板检测到。这次实验需要写代码,打开VsCode才发现Anaconda也出问题了,没办法,只好重装了:sob:。重装之后,一些设置又差点记不起来了,于是就想着写一篇博客记录一下。

Conda环境其实就是虚拟环境。如果把Python的包比喻成螺丝刀,扳手等工具,那么虚拟环境就像是把螺丝刀,扳手等工具装起来的容器(如下图)。用虚拟环境的好处是方便处理各种需求不同的开发环境而不会造成臃肿,不需要的时候可以通过直接删除对应的虚拟环境来删除对应的包。对于Python,可以使用virtualenvvirtualenvwrapperpipenv等包来管理虚拟环境。Conda环境比起安装其他虚拟环境更加方便。

推荐直接使用Miniconda — Anaconda documentation,不附带任何的库(Anaconde会自带科学计算库),相当于纯净版的Anaconda

Conda基础指令

  1. 创建Conda环境

    1
    conda create -name 环境名 python=版本号

    下面是一个例子:

    1
    conda create -n test python=3.7

    -n其实是-name的缩写,这边还需要提醒的是,对于网上大部分的项目,你都需要提前注意Python的版本是否合适。截至2023年3月25日为止,Python最高的版本号为Python 3.11.2通常来说,我们不会使用最新版本,一方面是最新版本总会出现一些问题,而出了问题你无法在社区中找到解决方法,另一方面就是很多项目都不是基于最新版的Python。如果没有特殊原因,个人推荐使用Python3.7

  2. 激活(切换)Conda环境

    1
    conda activate 环境名

    激活了环境之后,你就可以进行查看、安装、删除包等操作。

  3. 删除Conda环境

    1
    conda remove -n 环境名 --all

    尾巴上的--all是环境中所有包的意思。

  4. 查看当前的所有的Conda环境

    1
    conda info --envs

    注:Conda自带一个名为base的虚拟环境。

  5. 修改环境名

    conda没有直接重命名环境的指令,但是它提供了克隆指令,你可以先使用克隆指令克隆将要修改名字的环境到新建的环境中,然后用删除指令删除原有的环境。

    1
    2
    conda create --name B --clone A
    conda remove --name A --all

包与下载源的切换

Python包的基础操作

激活了Conda环境后,我们就可以在环境中对包进行查看、安装、删除等操作。在环境中,我们就可以使用Python自带的pip指令进行下载,pip指令默认的下载地址为:

https://pypi.python.org/simple

  1. 查看包

    1
    pip list
  2. 安装包

    1
    pip install 包名

    下面是一个下载OpenCV的例子:

    1
    pip install opencv-python
    • 注:如果你想更换下载源,可以加上-c 链接
    1
    pip install -c 下载源链接 包名
  3. 删除包

    1
    pip uninstall 包名
  4. 更新指定包

    1
    pip install --upgrade 包名
    • 注:这个指令也可以用来更新pip本身:
    1
    pip install --upgrade pip

切换下载源

上面提到了pip指令默认的下载地址,这是个外国网站,国内的访问速度可想而知,有时一个一兆的文件都要30秒,如果像是PyTorchOpenCV这种包,根本下不动,有时甚至是断开连接。这时候就需要切换下载的地址,推荐使用清华源、中科大、阿里这三个镜像网站,清华源不是很稳定,优先推荐中科大。

这里先展示一些下载源:

中科大:

conda config –add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config –add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config –add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/

清华源:

conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config –append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/
conda config –append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config –append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/

  1. 展示所有下载地址

    1
    conda config --show-sources

  2. 添加下载源

    1
    conda config --add channels 镜像源链接

    或者

    1
    conda config --append channels 镜像源链接
  3. 去除镜像源

    1
    conda config --remove channels 镜像源链接
  4. 删除所有下载源(恢复默认下载源)

    1
    conda config --remove-key channels

    此项操作后,除了default外,所有的后期添加的下载源都将被删除。

  5. 设置全局默认下载源

    如果你想直接设置一个默认的下载源,请使用以下命令:

    1
    pip config set global.index-url 下载源

    这样的作用是直接改变了pip指令的下载地址,将默认下载地址default换成设置后的下载源,此时进入提示路径(C:\Users\用户名\AppData\Roaming\pip)可以看到一个文件pip.ini,如果要回复默认的下载地址,那么将这个pip.ini文件删除即可。

  6. 从channel中安装包时显示channel的url

    1
    conda config --set show_channel_urls yes

  7. 演示(方便复制)

    • 添加中科大镜像源
    1
    2
    3
    4
    5
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
    conda config --set show_channel_urls yes
    pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
    • 添加清华源
    1
    2
    3
    4
    5
    6
    7
    8
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/
    conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
    conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
    conda config --set show_channel_urls yes
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

conda install与pip install

其实自己在日常使用时有时也使用过conda install 包名,安装后貌似也可以正常使用,这时候我有点好奇conda installpip install到底有什么区别,巧的是,这个问题官方文档也有解释。

Anaconda | Understanding Conda and Pip: https://www.anaconda.com/blog/understanding-conda-and-pip)

总的来说就是你用哪个安装包都可以正常使用,但是切忌重复安装相同的包!!

最明显的区别是,pip是Python专门用来安装其他包的一个下载功能包,**pip只能下载支持Python语言编写的包和源码**,而conda install中可能还有 C 或 C++ 库、R 包或任何其他软件,如mkl cuda这种C、C++写的包;以及在文章开头创建conda环境时,它还可以安装Python环境。

另外一点,pip进行安装、升级时,他并不会去检查安装列表,即使你装过,他还是会再下载一边,到安装的时候它才会去检查该包是否安装过。而conda是会去检查安装列表的,如果你安装过了,它并不会再给你安装一次。例子就是上面我创建test这个conda环境时,它并没有在帮我把依赖文件下一遍,它检测到我安装过后,直接进行了安装。

官方最后给出的总结表是:

conda pip
manages binaries wheel or source
can require compilers no yes
create environment yes ,built-in Python-only
dependency checks yes no