问题概述
银行证券或国家重要部门项目部署,经常需要无网络环境安装python,使用yum install方式变得不可行
解决方案
- 使用docker解决此问题,在客户机上离线安装docker,开发人员写好docker build file,在可联网的客户机上构建好镜像,再将镜像手动复制到目标离线客户机(此方式,本文不作讨论)
- 直接在离线客户机上安装离线python及项目依赖包,之后部署python项目
本文主要针对第二种方式,如何制作python离线安装包进行着重讲解
制作python离线安装包
目标环境:Red Hat Enterprise Linux Server release 7.0 (Maipo)
(作者后来在部署安装时,实际目标环境是7.1(Maipo),事实证明没有任何问题)
要在高版本linux上安装python,最好在更低的版本制作安装包,以防目标机器缺少相关的安装前依赖
制作离线安装包的环境:CentOS6.5 (带GUI,开发版,可联网)
- 全新安装,带GUI的开发版
- 可上互联网
- 可使用yum 安装,相关的respo已经配置好
制作过程
下载python的官方tar包
注意这是source源码包
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
使用yum安装python所需依赖包
yum install -y bzip2
yum install -y zlib
yum install -y xz
yum install -y readline
yum install -y gdbm
yum install -y sqlite
yum install -y ncurses
yum install -y gcc
yum install -y openssl
yum install -y openssl-devel
设置要安装的python目录
mkdir -p /opt/cwiz/python
解压已下载的python包
tar -zxvf Python-3.6.5.tgz
cd Python-3.6.5
修改ssl配置
cp Modules/Setup.dist Modules/Setup
vim Modules/Setup ## 注意修改的是Setup,而不是Setup.dist
修改Setup的内容,就是将ssl的注释的部分配置放开:
* # Socket module helper for socket(2)
* _socket socketmodule.c
* # Socket module helper for SSL support; you must comment out the other
* # socket line above, and possibly edit the SSL variable:
* #SSL=/usr/local/ssl
* _ssl _ssl.c \
* -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
* -L$(SSL)/lib -lssl -lcrypto
配置安装python
./configure --prefix=/opt/cwiz/python/
make & make install
如果报错,则用yum安装相关依赖,再make clean,再重新安装
检查python
/opt/cwiz/python/bin/python3
如果出现python交互界面即说明安装成功
制作python依赖包
在一台可联网的机器(192.168.0.8)上,在线安装好python3.6.5:
(一次性安装)
/opt/cwiz/python/bin/python3 -m pip install -r requirement.txt
(分别安装)
/opt/cwiz/python/bin/python3 -m pip install django==2.1.1
打包下载插件包:
安装某个插件包:
/opt/cwiz/python/bin/python3 -m pip install --download ~/wheelhouse django==2.1.1
或安装多个
/opt/cwiz/python/bin/python3 -m pip install --download scipy==1.2.0 -d=~/wheelhouse
注:如果你使用了新版本的pip 18.0 ,就可以使用download命令来代替pip install --download命令:
/opt/cwiz/python/bin/pip3 download -d ~/wheelhouse django==2.1.1
或
/opt/cwiz/python/bin/python3 -m pip download -d ~/wheelhouse django==2.1.1
安装python依赖包
将192.168.0.8上的wheelhouse文件夹和requirement.txt文件压缩打包,复制到不可联网的目标机器上
方式一:
需要将python安装到指定的目录,本例中将项目相关python依赖包全部安装到~/wheelhouse文件夹下,并将wheelhouse和依赖包版本列表文件requirement.txt压缩到py_assembly.tar.gz压缩包中
然后再安装到python,解压py_assembly.tar.gz得到一个requirements.txt和一个wheelhouse文件夹,使用以下命令安装到python:
/opt/cwiz/python/bin/python3 -m pip install -r requirements.txt --no-index --find-links=~/wheelhouse
若要安装单个插件,使用:
/opt/cwiz/python/bin/python3 -m pip install scipy==1.2.0 --no-index --find-links=~/wheelhouse
方式二:
直接pip install -r requirement.txt将相应依赖包安装到python
将安装好的离线安装包压缩
cd /opt/cwiz/
tar -zcvf python3.6.5-offline5.tar.gz python
安装python离线安装包
使用配置好后的python3.6.5-offline5.tar.gz(解压即用)或者通过以上方式进行安装
附:本例中python离线安装包下载地址:https://download.csdn.net/download/u011025878/10865440
测试python
进入python交互客户端
/opt/cwiz/python/bin/python3
导入安装依赖尝试看是否正常即可
[root@centos7 ~]# /opt/cwiz/python/bin/python3
Python 3.6.5 (default, Nov 11 2018, 08:10:42)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>>
本文中已制作好的离线安装包下载地址(目前在RedHat7和CentOS7上可完美运行):
https://download.csdn.net/download/u011025878/10865440
已安装以下依赖包:
asn1crypto==0.24.0
certifi==2016.2.28
cffi==1.11.5
cryptography==2.3.1
dateutils==0.6.6
Django==2.1.1
django-cors-headers==2.4.0
django-crontab==0.7.1
djangorestframework==3.8.2
gunicorn==19.9.0
idna==2.7
numpy==1.15.1
pandas==0.23.4
pycparser==2.18
PyMySQL==0.9.2
python-dateutil==2.7.3
pytz==2018.5
six==1.11.0
SQLAlchemy==1.2.11
elasticsearch==6.3.1
tensorflow==1.10.0