当前位置: 代码网 > it编程>前端脚本>Python > 离线迁移Python环境的两种方案(从LLaMA-Factory依赖迁移到内网pip源搭建)

离线迁移Python环境的两种方案(从LLaMA-Factory依赖迁移到内网pip源搭建)

2026年09月30日 • Python •我要评论
问题背景需要在联网电脑上为 llama-factory 项目创建虚拟环境并下载全部依赖,然后将该环境完整迁移到一台无法联网的离线电脑上运行。同时涉及跨系统(centos 7 ubuntu)迁移的兼容性

问题背景

需要在联网电脑上为 llama-factory 项目创建虚拟环境并下载全部依赖,然后将该环境完整迁移到一台无法联网的离线电脑上运行。同时涉及跨系统(centos 7 ubuntu)迁移的兼容性处理,以及内网 pip 源的搭建方案选型。

一、方案选型:conda-pack vs pip 离线包

1.1 conda-pack 方案(同系统推荐)

核心思路:联网机装好环境 → conda-pack 打包成离线压缩包 → 离线机解压 + conda-unpack 修复路径。

前提条件:两台机器必须满足:

  • 操作系统类型一致(都是 linux,或都是 windows)
  • cpu 架构一致(都是 x86_64)
  • python 大版本一致

离线机如需 gpu 训练,需本地安装匹配的 nvidia 驱动(驱动不能随环境迁移)。

联网机操作:

# 创建环境
conda create -n llama-factory python=3.10 -y
conda activate llama-factory
# 克隆项目并安装依赖
git clone https://github.com/hiyouga/llamafactory.git
cd llamafactory
pip install -e .
# 验证依赖完整性
python -c "import torch; print(torch.__version__)"
llamafactory-cli version
# 打包环境(建议在 base 环境执行)
conda activate base
conda install -c conda-forge conda-pack -y
conda pack -n llama-factory -o llama-factory.tar.gz

离线机操作:

# 解压到 conda envs 目录
mkdir -p ~/miniconda3/envs/llama-factory
tar -xzf llama-factory.tar.gz -c ~/miniconda3/envs/llama-factory

# 激活并修复路径(关键步骤,不可省略)
conda activate llama-factory
conda-unpack

# 验证
python -c "import torch; print(torch.__version__)"
llamafactory-cli version

1.2 pip 离线 wheel 包方案(跨系统推荐)

联网机下载:

cd llamafactory
mkdir wheels

# 按 requirements.txt 下载
pip download -r requirements.txt -d wheels

# 下载当前项目依赖
pip download -e . -d wheels
# 若 -e . 报错,改用:pip download . -d wheels

离线机安装:

conda create -n llama-factory python=3.10 -y
conda activate llama-factory
pip install --no-index --find-links=wheels -e .

注意:下载 wheel 的联网机和离线机的操作系统、cpu 架构、python 版本必须一致,否则平台标签不匹配会导致安装失败。

二、跨系统迁移:centos 7 ubuntu 的 glibc 陷阱

centos 7 的 glibc 版本为 2.17,ubuntu 22.04/24.04 分别为 2.35/2.39。glibc 只能向下兼容,不能向上兼容——在 ubuntu 上编译的二进制包放到 centos 7 上会报 version 'glibc_2.xx' not found。

2.1 各方案兼容性对比

方案centos 7 ubuntu原因
conda-pack不可行打包含解释器和 .so,跨发行版 glibc 不兼容
pip wheel 离线包️ 看情况纯 python 包无问题;带 c 扩展的包需平台标签 ≤ 目标机 glibc 能力
conda yaml 导出重建可行(需联网)目标机重新下载构建,绕开二进制兼容问题

2.2 以 centos 7 为底线下载兼容 wheel

如果离线机是 centos 7(glibc 2.17,最受限),联网机下载时强制指定 manylinux2014 标签:

pip download -r requirements.txt -d wheels \
  --platform manylinux2014_x86_64 \
  --python-version 310 \
  --abi cp310 \
  --only-binary=:all:

manylinux2014 对应 glibc 2.17,可通吃 centos 7 和所有更高版本的 linux 发行版。若离线机是 ubuntu 且 glibc ≥ 2.28,可放宽到 manylinux_2_28。

2.3 最稳妥的离线方案

  1. 联网机导出依赖清单:pip freeze > requirements.txt
  2. 在离线机本机装好 conda/python,用同一份 requirements.txt 从本地 wheel 目录安装:
pip install --no-index --find-links=/path/to/wheels -r requirements.txt

三、内网 pip 源搭建方案对比

方案部署难度需外网存储占用私有包上传适用场景
pypiserver否取决于包数需 twine简单离线分发
devpi否同上原生支持长期团队使用
nginx 反向代理是0不支持有跳板机时
nexus pro否同上原生支持已有 pro 授权
nexus oss———不支持 pypi

nexus repository oss(开源免费版)不支持 pypi 仓库类型,只有 pro 版支持。如果用的是 oss 版,建议改用 devpi 或 pypiserver。

四、pypiserver 完整部署(含 systemd 自启)

4.1 离线机准备

# 安装 pypiserver(需提前把 pypiserver 的 wheel 拷过来)
pip install --no-index --find-links=/path/to/wheels pypiserver passlib

# 创建专用运行用户
sudo useradd -r -s /sbin/nologin -d /data/packages pypi

# 设置目录权限
sudo chown -r pypi:pypi /data/packages
sudo chmod -r 755 /data/packages

4.2 生成 htpasswd 认证文件

sudo htpasswd -c /etc/pypiserver/htpasswd pypiuser
# 若无 htpasswd 命令,用 python 生成:
python -c "from passlib.apache import htpasswdfile; hf = htpasswdfile('/etc/pypiserver/htpasswd', new=true); hf.set_password('pypiuser', '你的密码'); hf.save()"

sudo chown pypi:pypi /etc/pypiserver/htpasswd
sudo chmod 640 /etc/pypiserver/htpasswd

4.3 systemd 服务文件

创建 /etc/systemd/system/pypiserver.service:

[unit]
description=pypi server (offline package repository)
after=network.target

[service]
type=simple
user=pypi
group=pypi
execstart=/usr/local/bin/pypi-server run \
    -p 8080 \
    -p /etc/pypiserver/htpasswd \
    -a /etc/pypiserver/htpasswd \
    --verbose \
    /data/packages

restart=on-failure
restartsec=5
nonewprivileges=true
protectsystem=strict
protecthome=true
readwritepaths=/data/packages

[install]
wantedby=multi-user.target

若不需要认证(纯内网隔离),将 -p 和 -a 改为 -p . 和 -a .。

4.4 启动服务

sudo systemctl daemon-reload
sudo systemctl start pypiserver
sudo systemctl enable pypiserver
sudo systemctl status pypiserver
sudo journalctl -u pypiserver -f   # 查看日志

4.5 客户端配置

# 无认证版
pip config set global.index-url http://<server_ip>:8080/simple
pip config set global.trusted-host <server_ip>

# 认证版
pip config set global.index-url http://pypiuser:密码@<server_ip>:8080/simple
pip config set global.trusted-host <server_ip>

验证:

pip install requests --dry-run

4.6 防火墙放行

# centos 7
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

# ubuntu
sudo ufw allow 8080/tcp

4.7 后续维护:添加新包

方式 a:直接拷文件(立即可用,无需重启)

cp new-package-1.0.0-cp310-manylinux2014_x86_64.whl /data/packages/

方式 b:通过 twine 上传

pip install twine
twine upload --repository-url http://<server_ip>:8080/ -u pypiuser -p 密码 dist/*.whl

五、完整流程总结

联网机(同系统或指定 manylinux2014)
  ├── conda create → pip install -e . → 验证
  ├── 方案a: conda pack -o llama-factory.tar.gz
  └── 方案b: pip download -r requirements.txt -d wheels
              ↓ 拷贝压缩包或 wheels 目录
离线机
  ├── 方案a: 解压 → conda activate → conda-unpack → 验证
  └── 方案b: conda create → pip install --no-index --find-links=wheels -e .
              ↓ 若需长期维护
内网 pip 源
  ├── pypiserver + systemd 自启
  ├── 客户端 pip.conf 配置 index-url
  └── 后续直接 pip install 即可

一句话:同系统用 conda-pack 最省事;跨系统用 pip wheel + manylinux2014 标签保底;长期维护搭 pypiserver 做内网源,一次部署永久可用。

以上就是离线迁移python环境的几种方案(从llama-factory依赖迁移到内网pip源搭建)的详细内容,更多关于离线迁移python环境的资料请关注代码网其它相关文章!

赞 (0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com