conda/pip基本常用命令理解与整理

最近配置了两轮pytorch环境,由于要频繁用到各种conda和pip命令,所以再此整理一下。

文章目录

前言:conda虚拟环境总结与解读

conda虚拟环境总结与解读

Conda和pip的理解

区别和联系

conda和pip都是用来管理包的,但是conda管理的范围大,不仅限于python,且其依赖检查更强大,还可以方便地创建虚拟环境。而pip专精于python,有一些conda没有的包在pip里能找到,而且pip有时候还有一些wheel(已经编译好的包),安装速度更快。

总之,conda和pip都可以用来管理python包,而且他们的包安装路径是一样的,但本身是两个软件,两套配置,两套命令。

建议优先conda,如果conda没有再用pip补充。

命令格式

linux命令格式如下:

command [options] [arguments]

其中option字段有---两种。

  • 用于短选项,可以组合使用,适合快速输入;

-- 用于长选项,不可组合使用,适合明确表达选项的含义

注:[]方括号只是为了分割,实际输入中并不存在

conda里面也继承了这个特点,如下:

conda -V

conda --version

conda命令由 [主命令] [子命令] [选项1] [参数1]···组成,举个例子:

conda config --add channels [新源]

config就是子命令,--add channels为选项,新源为参数

conda环境命令

查看

显示所有环境:conda env list

创建和删除

创建环境:conda create -n [env] python=[python版本]

删除环境写法1:conda env remove -n [env]

删除环境写法2:conda remove -n [env] --all

注意,remove本来是用来删除包的,但是在显式指定环境命并且加了--all之后,就可以进行环境删除操作了。

导出与导入

导出:conda env export > [file.yaml]

导入:conda env create -f [file.yaml]

注意,导入比直接创建多一个env子命令

激活和退出

激活:conda activate [env]

退出:conda deactivate

包管理命令

安装和删除

conda install [package][==version] [-c] [channel]

pip install [package][==version] [-i] [index-url]

注意,-c和-i是指定临时源,而指定版本的==也可以换成>=,<=,这种写法兼容性更强一些。

conda remove [-n] [env] [package]

pip uninstall [package]

非标准:conda uninstall [package]

注意,pip本身没有虚拟环境功能,所以不需要指定env,而conda要指定。如果conda不指定env,则默认当前环境,也就是我们最常见到的命令。此外,conda uninstall是一种过渡式命令,并不标准。

文件批量操作

导出所有包:pip freeze > [requerement.txt]

安装所有包:pip install -r [requerement.txt]

上述pip操作类似于前面说过的conda环境的导出和导入

导出:conda env export > [file.yaml]

导入:conda env create -f [file.yaml]

二者的区别是conda更好用

  • conda是一整个环境

    • 如果你查看yaml文件,你会发现里面有 包名、源、依赖、本地路径
    • 有人说conda导出环境不包含pip安装包,至少现在并非如此,conda会单独列出来一个pip项,里面的子列表列出pip的内容,并且在conda env create -f操作的时候调用pip命令进行安装
  • pip只是所有包的集合,没有环境信息

    • 如果包来自于本地或者conda,就会在后面附带本地路径信息,此时在另一台电脑上安装的时候就会出现问题。

所以前面所谓的"conda导出环境不含pip包",其实是不准确的,实际上pip和conda导出的包信息都是包含其他来源的。只不过pip比较笨,比较原始,无法识别是本地还是conda来源,所以统一视作来自于本地,只要是在另一台电脑上安装就必然报错,只能用于本地备份(freeze很形象)。而conda因为是为虚拟环境而生,所以更加智能,来源于pip的会标出,并且在conda env create时会调用pip进行安装,甚至还会给你带上镜像源地址,真的是无痛安装。

当然还有一种特殊情况,就是pip,conda,本地安装三者交叉,这样的环境是很难操作的,最好还是整个导出为文件,虽然很大,但是至少不会出错。

换源相关

镜像源的概念和使用

conda install numpy

这个命令的背后,是你的conda先到默认源(https://repo.anaconda.com/pkgs/main/)下进行查找,如果有对应包,就给你下载下来。如果没有,就切换下一顺位的源,以此类推。

所以源是什么呢?是一个代表文件夹路径的URL,而国内访问国外官网很不稳定,所以最好配置国内的镜像源。

需要注意,国内镜像源是有一定延迟的,不一定会有,但实际生产中大部分包都是有的,如果出错更大概率是你不会用镜像源,从网上粘贴了一个源就以为粘对了。目前来说,中科大源已停更,推荐使用清华源,当然还有阿里源,北师大源等可用,接下来展示清华源的使用方法:

最详尽的conda镜像源管理的终极教程------张浩彬

一般我们最常用的就是conda(anaconda)和pip(pypi),你点进去之后就可以看到对应目录,复制好进行添加即可。

查看源

conda config --show channels

pip config list

在install中临时指定源

  • conda用-c,即channel
  • pip用-i,即index-url

注意,conda源有时候不一定是URL形式,比如-c conda-forge;-c pytorch,这些都不是conda默认源,但用的很多,所以就约定俗成为一个标识符,背后还是URL,

通过命令永久换源

conda:

Bash 复制代码
conda config --add channels [channel]
conda config --remove channels [channel]

删除所有非默认:conda config --remove-key channels

pip:

Bash 复制代码
pip config set global.index-url [index-url]
pip config unset global.index-url

需要注意的是,conda是可以用命令单独添加和删除源的,但是pip不可以,global下面只有一个index-url,代表唯一默认源,所以其命令也是set而不是add

pip似乎可以使用add global.extra-index-url 来添加,但是实测下来没有add子命令,所以我认为pip如果要使用多个源还是得修改文件,实在不行就手动-i吧,反正pip用的也少。

通过文件永久换源

我推荐用命令换源,文件涉及到优先级,而且格式也不一定对,所以这篇仅供参考。

源信息储存在配置文件中,默认情况下配置文件是不存在的,因为没必要,直接写在程序代码里就可以。如果你这个时候要添加,可以手动创建,不用担心什么,而当你通过命令添加源后,配置信息就会写入配置文件,此时配置文件也会出现,你可以进行修改。

conda的配置文件在.condarc里,具体有三级,建议在用户级别进行配置:

  1. conda:env_dir/.condarc
  2. 用户:~/.condarc
  3. 系统:略

一个奇怪的现象是,按理说conda优先级高于用户,但是我进行conda配置的时候,写入的是用户级别的condarc,比较诡异。

具体写法是:

Bash 复制代码
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - conda-forge
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - https://repo.anaconda.com/pkgs/msys2

pip的配置文件位置看情况,linux叫pip.conf,windows叫pip.ini

格式为:

额外源格式为:

Bash 复制代码
[global]
extra-index-url = https://pypi.tuna.tsinghua.edu.cn/simple

代理模式下的SSL证书错误

在实际应用中,我发现开着代理(就算是直连模式),访问https源的时候就会出现链接失败的问题,这篇文章中提到了解决方法:

Python+代理模式下 +解决 pip 安装第三方包时因 SSL 报错Caused by SSLError

最简单的就是配置镜像源+把代理关了,就这么简单(doge)

其他

查看版本(pip同理):

conda -V

conda --version

相关推荐
leo_messi9413 小时前
conda使用记录
conda
理智.62913 小时前
Cursor 中使用 Conda 虚拟环境常见问题与彻底解决方案(踩坑实录)
python·conda
小鸡脚来咯21 小时前
conda使用教程
conda
工程师老罗1 天前
Pycharm下如何新建一个conda环境?
ide·pycharm·conda
工程师老罗1 天前
conda的常见指令
conda
理智.6292 天前
根据requirements.txt 完成环境中的依赖库导入
python·conda·pip
万粉变现经纪人2 天前
如何解决 pip install pyodbc 报错 缺少 ‘cl.exe’ 或 ‘sql.h’(ODBC 头文件)问题
数据库·python·sql·网络协议·bug·ssl·pip
gs801402 天前
【保姆级】MetaGPT安装避坑指南:Windows+Conda环境下解决依赖冲突、版本过低及配置失效问题
人工智能·windows·conda·metagpt
工程师老罗2 天前
在 PyCharm 的 Conda 环境下如何安装pytorch
pytorch·pycharm·conda
用什么都重名2 天前
Conda 虚拟环境安装配置路径详解
windows·python·conda