需求

在离线环境下,使用anaconda创建环境的时候,需要指定Python的版本,但是无法自动下载,需要手动下载Python包,然后用conda进行安装。
在这里插入图片描述

解决

首先下载Python包,在https://repo.anaconda.com/中选择Anaconda Packages
在这里插入图片描述
可以看到里面有Python包也有R包还有Microsoft R Open等一些包,然后选择Python的相关包:
在这里插入图片描述
最终打开的页面:
在这里插入图片描述

也可以通过https://repo.anaconda.com/pkgs/main/linux-64/直接打开。

有时,这个页面比较大,很难打开,无法获取文件的下载链接,可以通过wget https://repo.anaconda.com/pkgs/main/linux-64/ 来将页面下载到本地,用文本编辑器打开,然后获取到文件名,通过URL:https://repo.anaconda.com/pkgs/main/linux-64/python-3.6.13-h12debd9_1.tar.bz2来下载。

这里我选择了python-3.6.13-h12debd9_1.tar.bz2, 同时安装pip, pip-20.3-py36h06a4308_0.tar.bz2

  1. ~/anaconda3/envs/目录下,新建一个空文件夹,目录名为环境名,使用conda env list 查看环境列表时并不会显示该环境名称;这里我创建一个test环境名。
    在这里插入图片描述
  2. 但是可以进入新建的环境:使用conda activate +环境名进入新环境
    在这里插入图片描述
    有时候提示Use 'conda create' to convert the directory to a conda environment. 这时需要通过conda create --name test --offline 来创建一个空环境
  3. 然后在当前环境下安装Python:conda install python-3.6.13-h12debd9_1.tar.bz2

有时候会报错:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host=‘repo.anaconda.com’, port=443): Max retries exceeded with url: /pkgs/main/notices.json (Caused by NewConnectionError(‘<urllib3.connection.HTTPSConnection object at 0x7fb9a8912dc0>: Failed to establish a new connection: [Errno 101] Network is unreachable’))
可以使用命令conda install python-3.6.13-h12debd9_1.tar.bz2 --offline 来解决

在这里插入图片描述
4. 在新的环境中可以看到安装的Python
在这里插入图片描述
5. 安装pip, conda install pip-20.3-py36h06a4308_0.tar.bz2
在这里插入图片描述
6. 此时安装的pip位于新建环境中,输入pip --version 查看pip应位于新建环境目录下。
在这里插入图片描述

conda查看依赖

我们创建一个离线环境:conda create --name py3.10_test --offline,并且切换到这个环境:source activate py3.10_test

安装python,但是我们现在不知道下载python哪个版本,也不知道对应的依赖,应该怎么办?

解决办法:

使用conda install --download-only python==3.10,可以下载python3.10版本。

可以将所需要下载的依赖包,保存到requirements.txt文件中 conda install --download-only --no-deps --file ./requirements.txt;

控制台输出如下:
在这里插入图片描述
上面列出了python 3.10所依赖的包。依次在https://repo.anaconda.com/pkgs/main/linux-aarch64/下载即可。

将下载的文件拷贝到离线环境中,执行命令:conda install --offline ./*.tar.bz2 可以安装所有的依赖。

使用environment.yml方式

  1. 首先创建environment.yml:
name: py3.12_fastapi
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
dependencies:
  - python=3.12.0
  - pip=25.0
  - requests=2.32.4
  - fastapi
  - uvicorn
  - elasticsearch=7.13.3
  - pytest=8.4.1
  - tqdm=4.67.1
  1. 创建临时conda 安装目录export CONDA_PKGS_DIRS=/home/vincent/code/conda_env/my_py3.12_fastapi/ ,这个目录用于存放环境的安装路径。
  2. 通过conda info可以查看到package cache存放位置。
  3. 安装环境:conda env create -n my_py3.12_fastapi -f environment.yml (如果不适用-n py3.12_fastapi则会使用environment.yml中的name)
  4. 会自动将离线包下载到/home/vincent/code/conda_env/my_py3.12_fastapi/中。
  5. 构建channel:
mkdir -p /home/vincent/code/conda_env/my_py3.12_fastapi/linux-64
mkdir -p /home/vincent/code/conda_env/my_py3.12_fastapi/noarch
  1. 移动包文件到正确位置:
# 移动 Linux 平台的包
mv /home/vincent/code/conda_env/my_py3.12_fastapi/*.tar.bz2 /home/vincent/code/conda_env/my_py3.12_fastapi/linux-64/ 2>/dev/null || true
mv /home/vincent/code/conda_env/my_py3.12_fastapi/*.conda /home/vincent/code/conda_env/my_py3.12_fastapi/linux-64/ 2>/dev/null || true

# 移动平台无关的包
mv /home/vincent/code/conda_env/my_py3.12_fastapi/*.json /home/vincent/code/conda_env/my_py3.12_fastapi/noarch/ 2>/dev/null || true
  1. 将包缓存组织为conda channel结构:conda index /home/vincent/code/conda_env/my_py3.12_fastapi/
  2. 验证目录结构:
/home/vincent/code/conda_env/my_py3.12_fastapi/
├── linux-64/
│   ├── package1.tar.bz2
│   ├── package2.conda
│   └── repodata.json
└── noarch/
    └── repodata.json
  1. 将目录压缩,并迁移到新的离线环境中。
  2. 在新的环境中查看conda的channel:
(base) iie4bu@iie4bu-virtual-machine:~/code/conda_env$ conda config --show channels
channels:
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r

可以看到有两个channels,我们需要将其删除,然后添加我们本地的channel。(同时也需要删除~/anaconda3/.condarc)

conda config --remove channels https://repo.anaconda.com/pkgs/main
conda config --remove channels https://repo.anaconda.com/pkgs/r
# 启用离线模式
conda config --set offline true
conda config --add channels file:///home/vincent/code/conda_env/my_py3.12_fastapi/

查看channel:cat ~/.condarc
输出如下:

channels:                                                                                                
  - file:///home/vincent/code/conda_env/my_py3.12_fastapi/                                          
offline: true
  1. 在离线环境中修改environment.yml
name: my_env
channels:
  # 添加本地channel
  - file:///home/vincent/code/conda_env/my_py3.12_fastapi/
  - local
dependencies:
  - python=3.12
  - fastapi
  1. 创建环境conda env create -f environment.yml --offline
  2. 如果后续要往这个channel添加依赖,则直接把依赖包拷贝到linux-64文件夹内,然后重新在/home/vincent/code/conda_env/my_py3.12_fastapi/执行conda index .就会更新。
  3. 如果后续environment.yml文件发生了变化,例如新增了依赖,或者删除了某些依赖,可以在my_envconda环境下执行更新:conda env update -f environment.yml
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐