下面是一篇可以直接当教程用的文章,分两部分:
1)conda 查看/更换镜像源;2)pip 查看/更换镜像源。以 Ubuntu 为例,其实其他 Linux 也基本一样。
一、查看与更换 conda 源(镜像)
1. 查看当前 conda 源
打开终端,执行:
bash
conda config --show channels
你会看到类似输出:
text
channels:
- defaults
show_channel_urls: True
常见情况:
-
只有
defaults:说明用的是 Anaconda 官方默认源(在国内较慢) -
如果你之前设置过镜像,可能会看到类似:
textchannels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/ - defaults
也可以直接看配置文件:
bash
cat ~/.condarc
如果文件不存在或是空的,就说明你几乎没做过 conda 的源配置。
2. 常用国内 conda 镜像(任选其一)
以常用的两个例子(地址可能会更新,可到官方镜像站核对):
-
清华 TUNA:
- 主仓库:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/mainhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- conda-forge:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
- 主仓库:
-
阿里云:
https://mirrors.aliyun.com/anaconda/pkgs/mainhttps://mirrors.aliyun.com/anaconda/pkgs/r
下面用清华举例,其他镜像替换 URL 即可。
3. 临时换源(只对当前命令生效)
如果你只是偶尔从镜像下载安装一个包,可以这样:
bash
conda install numpy -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
或者使用 conda-forge 镜像:
bash
conda install -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge package_name
这种方式不修改全局配置,适合临时用。
4. 永久更换 conda 源(写入 ~/.condarc)
4.1 备份原来的配置(推荐)
bash
cp ~/.condarc ~/.condarc.bak 2>/dev/null || true
如果没有这个文件,会报错但被忽略(|| true),可以放心用。
4.2 设置为清华源示例
执行下面命令(会直接覆盖 .condarc 的 channels 部分):
bash
conda config --remove-key channels 2>/dev/null || true
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --set show_channel_urls yes
然后再查看一下:
bash
conda config --show channels
cat ~/.condarc
你应该能看到刚刚添加的镜像地址。
4.3 恢复官方默认源
如果以后想恢复到最原始的官方源:
bash
mv ~/.condarc.bak ~/.condarc # 如果你有之前备份
# 或者重置 channels:
conda config --remove-key channels
重置后,再执行:
bash
conda config --show channels
一般会只看到:
text
channels:
- defaults
二、查看与更换 pip 源(镜像)
1. 查看当前 pip 源
1.1 查看用于 install 的当前 index-url
bash
pip config get global.index-url 2>/dev/null || pip config get user.index-url 2>/dev/null || echo "未设置,使用官方默认源"
如果输出类似:
text
https://pypi.tuna.tsinghua.edu.cn/simple
说明你正在用清华源;
如果没输出"http..."而是"未设置...",说明用的是官方 https://pypi.org/simple。
1.2 直接从 config 文件看
Linux(Ubuntu) 下 pip 的配置文件路径可能是:
- 系统级:
/etc/pip.conf - 用户级:
~/.pip/pip.conf或~/.config/pip/pip.conf
可以逐个看:
bash
cat /etc/pip.conf 2>/dev/null
cat ~/.pip/pip.conf 2>/dev/null
cat ~/.config/pip/pip.conf 2>/dev/null
如果其中有类似:
ini
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
那就是你现在用的源。
2. 常用国内 pip 源(任选其一)
常见几家(以/simple 结尾):
- 清华:
https://pypi.tuna.tsinghua.edu.cn/simple - 阿里云:
https://mirrors.aliyun.com/pypi/simple - 豆瓣:
https://pypi.doubanio.com/simple - 中国科大:
https://pypi.mirrors.ustc.edu.cn/simple
下面以清华为例。
3. 临时换源(只对这一次安装生效)
命令后面加 -i 参数即可:
bash
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
这不会修改 pip 的全局配置。
4. 永久更换 pip 源(写入 pip.conf)
4.1 创建配置文件目录
Ubuntu 用户级通常用 ~/.pip/pip.conf:
bash
mkdir -p ~/.pip
4.2 写入清华源示例
bash
cat > ~/.pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
timeout = 60
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
然后检查:
bash
cat ~/.pip/pip.conf
pip config get global.index-url 2>/dev/null || pip config get user.index-url
再次安装包时,如果输出里出现了清华的 URL,就说明换源成功,例如:
bash
pip install requests
安装日志会显示从 pypi.tuna.tsinghua.edu.cn 下载。
如果你希望对全系统所有用户都生效,可以编辑
/etc/pip.conf,需要 sudo 权限:
bashsudo mkdir -p /etc sudo nano /etc/pip.conf内容同上。
4.3 恢复使用官方源
只要删除或注释掉 index-url 即可。
例如编辑 ~/.pip/pip.conf:
bash
nano ~/.pip/pip.conf
删除这一行:
ini
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
或整份配置文件删掉:
bash
rm ~/.pip/pip.conf
再检查:
bash
pip config list
没有自定义 index-url 时,就会回到默认官方源 https://pypi.org/simple。
三、conda 与 pip 共存时的建议
- 尽量用 conda 管理环境和大包(如 numpy、pytorch、tensorflow),涉及到 C/C++ 库时 conda 一般更省心。
- 在某个 conda 环境里再用 pip 补充 conda 里没有的 Python 包。
- 换源时:
- conda 单独配置
.condarc - pip 单独配置
pip.conf
两者互不干扰,可以都指向各自的镜像站。
- conda 单独配置
如果你愿意,可以把下面这几条"检查命令"记下来,随时查看当前源:
bash
# conda 当前源
conda config --show channels
# pip 当前源
pip config list
pip config get global.index-url 2>/dev/null || pip config get user.index-url 2>/dev/null