【炼丹炉】Conda环境离线迁移

本文介绍如何在满足数据安全需求的局域网环境下,通过conda-pack打包conda环境并利用pip下载依赖,实现NLP模型在新服务器的离线部署,包括详细的操作步骤和注意事项。
部署运行你感兴趣的模型镜像

1. 背景

笔者所在公司最近要在局域网内部署NLP算法模型,由于需求方对数据安全有严格要求,新服务器所在局域网不能直接访问Internet,因此需要将模型所需的运行环境离线迁移到新服务器中。

2. 方案

2.1 conda-pack

conda-pack是一个命令行工具,用于打包conda环境。该命令会将坏境中安装的软件包的二进制文件进行打包。
注:本方法不需要下载安装包,因此,conda-pack需要指定平台和操作系统,目标计算机必须于源计算机有相同的平台和操作系统。

2.1.1 打包

  1. condabase环境中安装conda-pack
pip install conda-pack
  1. 打包一个环境
# Pack environment my_env into my_env.tar.gz
conda pack -n my_env

# Pack environment my_env into out_name.tar.gz
conda pack -n my_env -o out_name.tar.gz

# Pack environment located at an explicit path into my_env.tar.gz
conda pack -p /explicit/path/to/my_env

2.1.2 重现

# Unpack environment into directory `my_env`
mkdir -p my_env
tar -xzf my_env.tar.gz -C my_env

# Use Python without activating or fixing the prefixes. Most Python
# libraries will work fine, but things that require prefix cleanups
# will fail.
./my_env/bin/python

# Activate the environment. This adds `my_env/bin` to your path
source my_env/bin/activate

# Run Python from in the environment
(my_env) $ python

# Cleanup prefixes from in the active environment.
# Note that this command can also be run without activating the environment
# as long as some version of Python is already installed on the machine.
(my_env) $ conda-unpack

2.2 pip download

利用pip将服务运行所依赖的包下载到本地,拷贝到目标服务器进行离线安装。

  1. 保存虚拟环境到requirements.txt
pip list --format=freeze > requirements.txt

备注: 此处不使用pip freeze命令是因为pip freeze导出的文件会出现@ file://的问题,导致后续下载依赖包的时候出现问题。

  1. 下载依赖包到指定目录
pip download -r requirements.txt -d "/home/admin/packs" -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. requirements.txt依赖包拷贝到目标服务器
  2. 在目标服务器创建conda虚拟环境
conda create -n my_env python=3.6.5 pip=10.0.1 --offline

备注:

  • --offline:指定离线创建虚拟环境;
  • python=3.6.5 & pip=10.0.1:指定默认的python版本号、并安装pip工具,如果不安装pip,则改虚拟环境使用默认的pip工具,就无法将依赖包安装到新虚拟环境。Anaconda自带的package在anaconda3/pkgs目录下,可自行查看;
  1. 切换到虚拟环境,并安装依赖包
pip install -U --no-index --find-links=./packs -r requirements.txt

备注: 若出现Cannot uninstall 'xxxx'. It is a distutils installed project and thus we cannot accurately det...(xxx是某package的名称),使用如下命令进行解决:

 pip install -U --ignore-installed --no-index --find-links=./packs xxx

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

迁移 Conda 离线环境通常是在没有网络连接的环境中复制或重建 Python 项目所需的依赖和虚拟环境。以下是几种可行的方法: ### 使用 tar 打包并迁移整个 Conda 环境离线环境下,可以直接打包现有的 Conda 虚拟环境,并将其解压到目标机器上使用。这种方式适用于完整的环境迁移。 1. 在源机器上,进入 `anaconda3/envs/` 目录下找到需要迁移环境文件夹。 2. 使用以下命令对环境进行打包: ```bash tar -czf conda_envsname.tar.gz envsname ``` 3. 将生成的 `.tar.gz` 文件传输到目标机器。 4. 在目标机器上,将压缩包解压至 `anaconda3/envs/` 目录: ```bash tar -xzf conda_envsname.tar.gz -C /root/anaconda3/envs/envsname ``` 此方法能够保留所有依赖项和配置信息[^3]。 ### 导出环境列表并在离线环境中手动安装 如果不能直接打包整个环境,可以导出环境中的包列表,并在目标机器上通过本地包库安装。 1. 在源机器上导出当前环境的依赖列表: ```bash conda env export > environment.yml ``` 注意:确保排除系统特定的依赖(如 `prefix:` 行),这可以通过编辑 `environment.yml` 文件来完成。 2. 如果有在线访问权限,还可以下载所有的依赖包以构建一个本地的包缓存: ```bash conda pack -n myenv ``` 这会创建一个包含所有必要二进制文件的 `.tar.gz` 文件,可以在其他机器上解压并激活。 3. 将 `environment.yml` 或者 `.tar.gz` 包传输到目标机器。 4. 在目标机器上,如果有网络连接,则可以使用如下命令从 `environment.yml` 创建新环境: ```bash conda env create -f environment.yml ``` 如果没有网络连接,则需要确保所有必要的 `.tar.bz2` 包都已放置在一个目录中,然后运行: ```bash conda install --use-local path/to/package.tar.bz2 ``` 这种方法适合跨平台或者当只需要部分依赖时的情况[^2]。 ### 清理 pkgs 缓存中的 URL 信息 有时,在尝试离线安装包时,Conda 可能会试图去联网下载缺失的信息。为了避免这种情况,可以在迁移前删除 `pkgs` 目录下的 `urls` 和 `urls.txt` 文件,这样可以防止 Conda 去查找在线资源[^4]。 综上所述,根据具体需求选择合适的方法来进行 Conda 环境离线迁移。对于最简单的情况,直接打包整个环境是最直接有效的方式;而对于需要定制化处理的情况,则可以采用导出环境列表配合本地包库的方式来实现。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值