应用背景:前面在进行离线ocr实现时,需要在线安装好easyOCR工具包以及用于支持pdf图像提取的pdf2img包,然后将这个环境离线迁移到不能上网的centOS系统的生产环境服务器上,所以除了在能够上网的电脑上配置python OCR开发环境外(我是在自己的个人笔记本电脑上利用VMware虚拟一个centOS虚拟机、然后在虚拟机里面配置python开发环境和easyOCR环境),最重要的就是如何将在线的Linux系统迁移到离线的系统中去(实际上是将ocr环境迁移到离线的服务器上后,将该系统制作为一个docker来使用)?

测试结论:先说结论吧!

1-分别下载离线包重新安装的方式:待迁移系统可联网条件下,那么可以(利用pip list --format=freeze > requirements.txt命令)生成源系统中对应的requirements.txt文件、然后(利用pip download -r requirements.txt -d packs/ -i https://mirrors.aliyun.com/pypi/simple/ 命令)将源系统上的python包离线下载对应的离线安装包文件,最后将这些包文件和requirements.txt文件均拷贝到目标机上,再利用pip install  --no-index --find-links=./packs/ -r requirements.txt即可生成与源电脑相同的系统,下载下来的离线安装包packs内容如下图所示:

requirements.txt文件的内容如下所示:

将上面的均拷贝到离线目标系统中后,再进入到虚拟环境中安装即可,如下图所示:

2-直接拷贝安装后文件夹的方式:待迁移系统可以不联网,直接将安装包所在的文件夹全部内容直接拷贝替换新的Linux系统中对应的文件夹即可!(当然,为了避免拷贝大量小文件出错,可以利用压缩——解压的方式拷贝)

具体来看,由于一般情况下我们均使用conda来生成一个虚拟环境,而不是直接在系统中安装python环境,所以需要拷贝的文件夹就是虚拟环境对应的文件夹了(例如home/miniconda3/envs/ocr/),例如,假设我生成的虚拟环境名字为ocr,则拷贝的文件夹如下图所示:

如果还是不行,那就是虚拟环境中可能使用到了系统pkgs文件夹中的全局包(例如home/miniconda3/pkgs/)了,那就再把pkgs文件夹一并拷贝到目标系统并覆盖,如下图所示:

拷贝后,无需再利用conda create --name ocr命令,直接运行conda env list命令,即可发现已经有了虚拟环境ocr了,如下图所示:

直接激活该ocr环境,即可使用了:

最后,简要总结如下:

##############################
#    pip 离线环境安装(简要版)
##############################
所需软件:
CentOS-7-x86_64-DVD-1708.iso
Miniconda3-py39_4.12.0-Linux-x86_63.sh

1.本地生成 requirements
pip list #查看安装的包
pip list --format=freeze > requirements.txt #查看已安装的包(带版本号)并导出到requirements.txt文件中
#pip freeze > requirements.txt #将已安装包的名称导出到requirements.txt文件中(会一并记录包的来源地址,适合迁移到另一台可上网环境,无法用于离线迁移)
2.创建存放安装包的目录
mkdir /packs
3.从指定源下载需要文件到指定文件夹里
pip download -r requirements.txt -d packs/ -i https://mirrors.aliyun.com/pypi/simple/
4.本地安装
pip install --no-index --find-links=./packs/ -r requirements.txt如果无法离线创建虚拟环境,就需要运行下面的conda命令:
conda config --set offline true

详细版本如下:

############################################
easyOCR离线开发环境部署攻略---在线配置下载
############################################
1.找一台可以上网的电脑,安装好与目标机一样的linux系统(我这里使用的是在windows系统物理机上用VMware Workstation虚拟机创建的centOS7 64-bit系统):
CentOS-7-x86_64-DVD-1708.iso

2.下载并安装Miniconda3(可以在windows物理机上下载后拷贝到centOS虚拟机上,也可以直接在centOS虚拟机上下载)
!!!注意第一个坑:在物理机与centOS虚拟机之间进行拷贝时,不要用鼠标直接拖动的方式,要用ctrl+C/ctrl+V的方式,因为前者会丢包,尤其是当文件较大时,拷贝几百兆的文件到虚拟机上可能只有几十兆了,很容易出现莫名其妙的错误,原因未知!!!
bash Miniconda3-py39_4.12.0-Linux-x86_63.sh

3.根据个人需要,可以创建虚拟python环境然后在该虚拟环境下的lib文件夹下安装python包,当然也可以不创建而是在Miniconda3的lib文件夹下直接安装python包:
conda create --name ocrenv
conda activate ocrenv

4.安装python包(其他包也是一样的,例如我同步安装了分词的jieba、打包的pyinstaller等):
pip install easyocr -i https://mirrors.aliyun.com/pypi/simple/

5.测试环境是否OK,例如运行编译一个导入了easyocr包的python源程序看结果正确与否:
python ./img2txt.py 001.jpg 002.jpg

6.生成本地python环境的requirements.txt
pip list --format=freeze > requirements.txt #查看已安装的包(带版本号)并导出到requirements.txt文件中
#pip freeze > requirements.txt #将已安装包的名称导出到requirements.txt文件中(会一并记录包的来源地址,适合迁移到另一台可上网环境,无法用于离线迁移)

7.根据requirements.txt下载当前环境所需的python包:
pip download -r requirements.txt -d packs/ -i https://mirrors.aliyun.com/pypi/simple/
其中,-d表示指定包下载的文件夹目录(必须事先创建好,这里是当前目录下的packs文件夹,在linux环境下可以利用"mkdir ./packs/"命令创建)
常用的国内镜像源有:
阿里云:https://mirrors.aliyun.com/pypi/simple/
清华云:https://pypi.tuna.tsinghua.edu.cn/simple
中科大:https://pypi.mirrors.ustc.edu.cn/simple
腾讯云:http://mirrors.tencentyun.com/pypi/simple
豆瓣:  https://pypi.douban.com/simple
上面使用-i参数选项指定网址是临时配置,每次都输入比较麻烦,也可以参考https://blog.csdn.net/swq404/artical/details/119080901进行永久配置;

(1)编辑配置文件
vim ~/.pip/pip.conf
如果不行,尝试
cd ~ && mkdir .pip
cd .pip && vim pip.conf
(2)修改配置文件
[global]
index-url = https://pypi.mirrors.ustc.edu.cn/simple

8.将packs文件夹和requirements.txt文件两者从当前centOS上拷贝出来,准备进行下一步的本地部署安装:
这里需要注意前面的提出的那个坑,从centOS虚拟机中往物理机拷贝文件时,不要使用拖动,容易出错!也可以在centOS中将packs文件夹压缩后再拷贝出来。
至此,U盘或者准备的部署包中应该包括如下的文件:
文件夹packs
文件requirements.txt
文件Miniconda3-py39_4.12.0-Linux-x86_63.sh

############################################
easyOCR离线开发环境部署攻略---离线安装部署
############################################
将前述文件拷贝到离线的centOS目标机上;
1.安装Miniconda3:
bash Miniconda3-py39_4.12.0-Linux-x86_63.sh

2.使配置生效(也可以关闭当前终端再重新打开新终端的方式使安装生效,但在docker镜像制作的时候由于不能关闭当前终端所以就需要通过显式调用下面命令的方式)
source /root/.bashrc

3.同上,可以根据个人需要看是否创建虚拟环境、在虚拟环境下进行安装:
conda create --name ocrenv
conda activate ocrenv

4.安装下载的ocr python包(注意:--find-links选项指定离线包所在文件夹的目录,一般是进入到requirements.txt所在的目录执行,不是的话也可以指定后者的路径)
pip install --no-index --find-links=./packs/ -r requirements.txt
至此包含easyocr的python开发环境已经部署完毕,可以利用import python进行OCR应用开发了!
但是,此时的命令行命令为如下格式:
python ./img2txt.py 001.jpg 002.jpg
如果需要将前面的python也省略,变为如下的命令:
./img2txt.py 001.jpg 002.jpg
需要再进行如下两步操作:

5.在python源文件中首行添加一句python执行环境的地址(要根据个人电脑环境而改变,如果不知道的话可以利用whereis python命令来查询系统中所有的python路径,但是注意电脑中可能有多个python,尤其是利用Miniconda3安装多个虚拟环境时,这时就要自己判断现在所用的ocr开发环境是哪个python路径了):
#!/usr/bin/python
# coding=utf-8

#!/root/miniconda3/bin/python
# coding=utf-8

#!/home/super(计算机用户名)/miniconda3/bin/python
# coding=utf-8

6.将python源文件中的换行符由windows环境下的CR LF换为linux环境下的LF,不然会报如下错误:
[errno -3]:#!/root/miniconda3/bin/python^M: bad interpreter: No such file or directory ...
利用Notepad++软件时,可以利用命令:编辑->文档格式转换->转为Unix(LF)菜单完成转换,然后拷贝覆盖即可;

##############################
#    conda 常用命令
##############################
conda env list #列出当前存在的环境
conda create --name myenv #新建虚拟环境
conda create --name myenv python=3.10 #新建虚拟环境(指定python版本)
conda activate myenv #激活指定虚拟环境
conda env remove --name myenv #删除指定环境

##############################
#    conda 离线迁移常见错误
##############################
无法创建虚拟环境出错时:
(base) [super@localhost Downloads]$ conda create -n myenv
Collecting package metadata (current_repodata.json): done
Solving environment: done
CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/current_repodata.json>
Elapsed: -
An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
If your current network has https://www.anaconda.com blocked, please file
a support request with your network engineering team.
'https://repo.anaconda.com/pkgs/main/linux-64'

conda config --show-sources 查找conda的配置文件,默认在用户目录下,注意Linux中ll或ls看不到以点开头的隐藏文件,需要使用-all选项才可以看到隐藏文件
如果为空,则表示默认连接网络,离线环境下就会出错;
就在/home/super也即用户目录下创建.condarc文件,并添加下面一句:
offline: true
或者简单的执行下面的一句命令,就会自动的完成上述工作:
conda config --set offline true

##############################
#    conda 离线迁移环境
##############################
一句话,就是直接将联网电脑上的虚拟环境文件夹(压缩后)拷贝到目标机上对应的envs文件夹(解压缩)即可;压缩的目的是为了避免复制文件出错!
在我的centOS-7电脑上,利用conda create命令建立虚拟环境后的目录是/home/super/Miniconda3/envs/文件夹;
如果还不行,就再把 Miniconda3/pkgs 也压缩拷贝过来替换即可;
------------------------------------------------------------------
具体操作就是:
(base) [super@localhost Downloads]$ conda config --set offline true #由于目标机是离线状态,所以需要执行这句才能在目标机上创建虚拟环境
(base) [super@localhost Downloads]$ conda create -n ocr pip #新建虚拟环境时指定安装pip工具,不然在新建虚拟环境中无法使用pip命令
(base) [super@localhost Downloads]$ conda env list #确认新建的虚拟环境生成成功
(base) [super@localhost Downloads]$ conda activate ocr #在目标机上激活新建的虚拟环境
(ocr) [super@localhost Downloads]$ conda list #确认新建的虚拟环境中包含有pip(自然也有python了)
拷贝requirements.txt文件和对应的安装包文件夹到目标机上,例如requirements.txt就放在当前的Downloads目录,而pip包都存放在当前目录下的packs文件夹下:
(ocr) [super@localhost Downloads]$ pip install -r requirements.txt --no-index --find-links=./packs/
如果此时在激活的ocr虚拟环境中分别运行conda list和 pip list命令的话,就会发现conda list列出来的python包要比pip list中的多,而多出来的那部分正是前面新建虚拟环境时就安装的那几个;
此时,ocr虚拟环境已经部署完毕,可以运行一个ocr程序进行测试一下了:
在测试之前还需要把序言包langdata放在程序中指定的位置:
此处,我是放置在/home/langdata位置,由于在根目录/home/上没有写权限,所以我先把langdata放在用户super下,然后再mv过去:
(base) [super@localhost ~]$ ls
Desktop    Downloads  miniconda3  Pictures  Templates
Documents  langdata   Music       Public    Videos
(base) [super@localhost ~]$ sudo mv langdata ..
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.
[sudo] password for super: 
(base) [super@localhost ~]$ python imgs2txts.py 0010001.jpg 0010002.jpg
或者(当在python源程序imgs2txts.py的第一行添加了python路径后)
./imgs2txts.py 0010001.jpg 0010002.jpg
至此,ocr的开发环境就已经部署完毕!
------------------------------------------------------------------
然后,将虚拟环境/home/super/Miniconda3/envs/下面的ocr文件夹压缩,拷贝到目标机的相同位置,解压:
此时,再运行conda env list就会发现,虽然在目标机上并没有运行conda create -n ocr pip命令来创建虚拟环境,也可以看到拷贝过来的虚拟环境了,如下所示:

(base) [super@localhost Downloads]$ conda activate ocr
(ocr) [super@localhost Downloads]$ ls
0010001.jpg  0010002.jpg  imgs2txts.py  Miniconda3-py39_4.12.0-Linux-x86_64.sh  pkgs.tar.gz
(ocr) [super@localhost Downloads]$ python imgs2txts.py 0010001.jpg 0010002.jpg
CUDA not available - defaulting to CPU. Note: This module is much faster with a GPU.
/home/super/miniconda3/envs/ocr/lib/python3.9/site-packages/torchvision/models/_utils.py:252: UserWarning: Accessing the model URLs via the internal dictionary of the module is deprecated since 0.13 and will be removed in 0.15. Please access them via the appropriate Weights Enum instead.
  warnings.warn(/home/super/miniconda3/envs/ocr/lib/python3.9/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and will be removed in 0.15, please use 'weights' instead.
  warnings.warn(/home/super/miniconda3/envs/ocr/lib/python3.9/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and will be removed in 0.15. The current behavior is equivalent to passing `weights=None`.
  warnings.warn(msg)
(ocr) [super@localhost Downloads]$ ls
0010001.jpg  0010001.txt  0010002.jpg  0010002.txt  imgs2txts.py  Miniconda3-py39_4.12.0-Linux-x86_64.sh  pkgs.tar.gz
(ocr) [super@localhost Downloads]$ cat 0010001.txt
多地新冠疫苗己经开打!2021年春节即将到来,冬春季疫情防控成为最受关注的话题。虽然多地出现本土确诊病例,但是,近期伴随北京上海深圳等多地新冠疫苗正式开打,防控又多了一道安全屏障。早在元旦之前,国内己有部分地区的重点人群疫苗接种开启。例如,陕西省重点人群接种工作已从2020年12月25日全面启动。首批参加新冠病毒疫苗接种的是海关检验检疫口岸边检口岸进口冷链物品装运及医疗卫生机构的一线工作人员等重点人群。此外,深圳最近也已经为重点人群启动接种工作,主要面向9类高风险人员。其中进口冷链物流相关人员。隔离场所工作人员 海关边检人员等8类重点人群都是通过工作单位统一预约接种。
(ocr) [super@localhost Downloads]$ 
如果在拷贝到目标机的时候还想为虚拟环境改个名字,可以运行命令
conda create -n ocr2 --clone /home/Miniconda3/envs/ocr --offline

##############################
#    conda 联网/离线安装包
##############################
1.在本地联网计算机上安装好环境,然后生成conda虚拟环境安装包列表(注意:非通过conda命令安装的python包将不包含在内,例如pip install方式安装的)
conda list --explicit > conda-requirements.txt
生成的txt文件内容如下所示:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64/ca-certificates-2022.6.15-ha878542_0.tar.bz2
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2
...
explicit意为明确的,--explicit选项的意思是在列出包信息的时候是列出包的来源,对于联网安装的包自然就是其下载来源的URL了!
注意:conda list命令还有一个选项--export,意思是在list出当前环境中安装的包名字时,同时指出版本:
conda list --export > requirements.txt
生成的txt文件内容如下所示:
nbconvert=6.5.0=pyhd8ed1ab_0
nbconvert-core=6.5.0=pyhd8ed1ab_0
nbconvert-pandoc=6.5.0=pyhd8ed1ab_0
nbformat=5.4.0=pyhd8ed1ab_0
...
注意,conda中很多选项都有对应的缩写,使用完整单词时是两个短划线,使用缩写时是一个短划线,例如:--name和-n,--file和-f,--help和-h等;
但是,对于由于explicit和export具有相同首字母e,就只能对应一个了,这里-e对应后者,也即export选项。

2.如果目标机可以联网,那么只需将上面得到的conda-requirements.txt拷贝到目标机上后,在目标机上运行;
conda create --name <envname> --file conda-requirements.txt 
即可根据conda-requirements.txt中制定的网址自行重新下载安装了;

3.如果目标机不能联网,由于conda-requirements.txt中所有的包都是带有网址的压缩包,所以可以通过迅雷之类的下载软件全部下载下来到一个文件夹里,然后将下载的压缩包文件夹拷贝到目标机上,然后运行:
conda create --name ocr --offline --file ./conda-ocr/*
这里的--file选项指定的就不是一个文件,而是一个文件夹了!

##############################
#    conda 本地安装包安装
##############################
conda install --use-local package_name
conda install --file package_name
conda install --file requirements.txt
conda install --offline --file ./packs/*
也就是说,--file选项既可以指定一个安装包,也可以指定一个环境配置txt文件,还可以指定一个存放多个安装包的文件夹(且不需要像pip那样同时需要txt和文件夹);

Linux系统python(虚拟)环境的迁移相关推荐

  1. linux系统中变量,Linux系统中的环境变量知识详解

    对于没有使用过linux系统的用户来说,有很多术语和功能都很陌生.本文就介绍了linux系统中的环境变量的相关知识,具体内容如下所述. linux是一个多用户的操作系统.每个用户登录系统后,都会有一个 ...

  2. linux怎么查看系统环境变量路径,Linux系统中的环境变量该如何设置与查看

    今天小编要跟大家分享的文章是关于Linux系统中的环境变量该如何设置与查看.大家都知道,在 Linux 系统中,有环境变量和 Shell 变量这两种变量. 环境变量是在程序及其子程序中全局可用的,常常 ...

  3. Linux系统中Java环境的搭建及JDK的安装(附上每一步操作截图及说明)【一看就懂】

    开门见山 第一步: 官网下载你所要使用的jdk版本:或本地已经存在的Linux系统的jdk压缩包.(这里以jdk1.8为例) 将此压缩包按如下图所示操作(1.进入/opt/文件 2.将压缩包拖入此处) ...

  4. linux搭建python运行环境_centos运行.py centos5.5下搭建python开发运行环境 - Linux - 服务器之家...

    centos运行.py centos5.5下搭建python开发运行环境 发布时间:2017-04-28 来源:服务器之家 我们知道ython可以在windows.linux.android运行了,但 ...

  5. Linux系统Python配置MySQL详细教程

    Linux系统自带Python,且根据系统自带资源来对python配置mysql:安装需要已配置好正确的yum源: 在python未配置mysql的情形下,直接import MySQLdb的提示如下 ...

  6. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  7. Linux系统用户环境变量大全,linux系统和用户环境变量的配置文件

    linux系统中有很多系统变量,那么这些变量都存在哪里呢?为什么用户一登录shell就自动有了这些变量呢?下面将介绍几个配置文件. 1./etc/profile:这个文件预设了几个重要的变量,例如PA ...

  8. stm32mp1安装linux系统,stm32mp1linux开发环境搭建(cortex a7)

    原标题:stm32mp1linux开发环境搭建(cortex a7) 写在前面: 本文章为<STM32MP1系列教程之Cortex-A7开发篇>系列中的一篇,全系列总计11篇.笔者使用的开 ...

  9. linux查看本机所有预设的系统变量,如何设置与查看Linux系统中的环境变量?

    大家都知道,在 Linux 系统中,有环境变量和 Shell 变量这两种变量. 环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路径等等这样的信息.而 ...

最新文章

  1. leetcode 292. Nim Game | 292. Nim 游戏(DP->数学推理)
  2. 工业相机(3D)主要参数详述
  3. python中if else语句用法_Python中if-else语句的多种写法
  4. 第一个Win32 SDK应用程序
  5. 程序员真的是吃青春饭的吗?(献给即将进入职场的程序员们)
  6. centos 6.0 安装 mysql 5.5.30_centos6.5下的mysql5.6.30安装
  7. android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题
  8. 博客开通 坚持做自己懒得做但是正确的事情
  9. PS设置图片为透明背景简单操作
  10. 博途1200/1500PLC斜坡指令RAMP(带暂停功能)
  11. web3.0是什么意思(web3和元宇宙的关系)
  12. 【python机器学习】普通最小二乘法多元线性回归
  13. 怎样用python提取英文字母_python如何获取一次获取26个英文字母
  14. MyBatis关联对象查询
  15. 快排算法及常见两种常见优化方法
  16. 迁移学习(Transfer Learning)-- 概念理解
  17. 动漫头像修复高清,提高分辨率、提高清晰度的模型处理
  18. android 硬格式化,LG G3硬格机教程 教你如何清理手机数据
  19. 蚂蚁矿池宣布赞助火箭队,吴忌寒这回要把 BCH 印在 NBA 球衣上吗?
  20. NodeMCU-ESP8266使用TFT_eSPI库驱动IC为ST7735的1.44寸TFT屏幕(TFT_eSPI详解)

热门文章

  1. 第六大晶圆代工厂商2021净利润大增593.3%
  2. MNE学习笔记(四):Evoked数据结构
  3. html5 游戏 闪退,为什么玩游戏会闪退
  4. ssh 远程执行命令简介
  5. 8.26新股票池操作建议(ZZ)
  6. 工业互联网数字化中台解决方案
  7. 此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。
  8. 安卓浏览器解析apk文件 大小信息_apk提取器安卓版最新版下载_apk提取器安卓版免root下载2020...
  9. Java开发中常见的问题、异常及解决方案
  10. 我哪可爱的小主版华硕P8B75-V