Python迁移虚拟环境(适用conda环境迁移)

问题

Python的环境迁移是个很容易遇到的问题,在以下情况下均有需求:

1. 自己建了一个环境,要给别人搭一套直接可用的环境。

2. 网络差,无法下载相关三方包。

3. 无法联网,需要离线配置Python环境。

因此,需要一种比较合适可用的环境迁移手段。

直接搜索该问题,很多解决方案都是:1. pip生成requirements.txt,别处直接 pip install;2. mvn pack;3. 直接复制conda的虚拟环境包(envs下的目录)。

方案1并不是很通用,在网络条件好的情况下,可以解决部分问题;方案2,没有尝试,但很多处都提到该方案仅支持迁移conda安装的包,而实际过程中很容易夹杂一些pip安装的包(笔者便是这种情况,因此没有尝试该解决方案);而方案3则是很容易遗留包依赖的问题。

经过长时间的互联网解决方案检索,并通过实际验证,整理出了一套应该是相对比较可用的方案。

解决方案

首先说明,这种环境迁移,其实很适合用docker技术来完成。

这里并不讨论docker技术方案,主要提供Python原生的解决方案。

主要思路是,在本环境下离线Python包,在目标环境下直接安装。

主要用到:pip download 来下载离线包

本方案实际在ubuntu 16.04, anaconda中经过测试。

1. 下载离线包

此处假定,本地环境已经配置完成,并且能正常使用。

  • 首先,使用pip生成requirements.txt文件:
$ pip freeze > requirements.txt
  • 然后,根据requirements.txt的包和版本下载离线包:
$ pip download -r requirements.txt -d /path/to/save/packages

此过程如果遇到下载失败的情况,可删除requirements.txt中对应的包记录,由手动下载完成

手动下载可参考: 1. conda包官网 ;2. 官网pypi源;3. 清华pypi源等。

包的版本,可根据具体测试后升降,以便找到合适能够下载使用的离线包。

2. 安装离线包

  • 在目标环境中使用本地离线包安装三方包:
$ pip install --no-index --find-links=/path/to/save/packages -r requirements.txt

此过程中如果遇到安装失败的情况,可考虑直接安装对应包查看问题所在:

$ pip install xxx.whl

直接安装可能会出现 xxx is not a supported wheel on this platform 的报错情况,如果是这种情况不必着急,很可能只是文件命名的问题,改一下包名即可:

具体可以在shell中查看pip支持的文件名格式要求:

>>> import pip
>>> pip.pep425tags.get_supported()
[('cp36', 'cp36m', 'manylinux1_x86_64'), ('cp36', 'cp36m', 'linux_x86_64'), 
('cp36', 'abi3', 'manylinux1_x86_64'), ('cp36', 'abi3', 'linux_x86_64'), 
('cp36', 'none', 'manylinux1_x86_64'), ('cp36', 'none', 'linux_x86_64'), 
('cp35', 'abi3', 'manylinux1_x86_64'), ('cp35', 'abi3', 'linux_x86_64'), 
('cp34', 'abi3', 'manylinux1_x86_64'), ('cp34', 'abi3', 'linux_x86_64'), 
('cp33', 'abi3', 'manylinux1_x86_64'), ('cp33', 'abi3', 'linux_x86_64'), 
('cp32', 'abi3', 'manylinux1_x86_64'), ('cp32', 'abi3', 'linux_x86_64'), 
('py3', 'none', 'manylinux1_x86_64'), ('py3', 'none', 'linux_x86_64'), 
('cp36', 'none', 'any'), ('cp3', 'none', 'any'), ('py36', 'none', 'any'), 
('py3', 'none', 'any'), ('py35', 'none', 'any'), ('py34', 'none', 'any'), 
('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), 
('py30', 'none', 'any')]

举个实例:

笔者在迁移环境时,numpy离线包的文件名为:numpy-1.19.2-cp36-cp36m-manylinux2010_x86_64.whl,查看pip支持的文件名格式要求后,将manylinux2010改为manylinux1之后(新的离线包文件名为:numpy-1.19.2-cp36-cp36m-manylinux201_x86_64.whl),再次安装,即顺利安装成功。

祝大家也能顺利完成环境迁移。

参考资料

Anaconda环境离线迁移、Windows python环境离线迁移、pip环境离线迁移

Python——pip安装报错:is not a supported wheel on this platform

BUG

笔者在使用此环境进行迁移时,发现TensorFlow并没有成功的迁移GPU环境(但pytroch可以)。

解决方案参考这篇博客:使用pip download环境conda迁移,TensorFlow无法使用GPU

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值