最近遇到了一个场景:需要将Python项目文件打包到无法联网的主机上部署执行,本篇文章记录针对于该场景的处理方案。

说明:

源主机(可联网):安装了Python3和pip3

目标主机(无法联网):需安装和源主机相同的Python版本和pip3,部署执行项目文件

主机系统为centos,Python版本为3.5.2,通过虚拟环境+pip进行迁移

目标主机离线安装Python及pip3

源主机中下载所需包

Python3

首先,下载Python3,可以在官网或者通过源主机(可联网的其它主机)wget:

wget --no-check-certificate https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

Python3依赖包

然后,需要下载Python3的依赖包,可以通过centos镜像中去copy,不过我更推荐用yum生成的方式:

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel  epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel sqlite-devel tk-devel db4-devel libpcap-devel libffi-devel --downloadonly --downloaddir=/packages

命令执行完毕,你就会在/packages目录下发现所需的所有.rpm文件。

如果,源主机中已经安装了这些依赖,那么你可以用:

yum reinstall zlib-devel bzip2-devel openssl-devel ncurses-devel  epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel sqlite-devel tk-devel db4-devel libpcap-devel libffi-devel --downloadonly --downloaddir=/packages

打包:

zip -r packages.zip packages/

目标主机中安装

将Python-3.5.2.tgz和packages.zip上传至目标主机。

首先,安装Python3依赖:

unzip packages.zip
cd packages/
rpm -Uvh *.rpm --nodeps --force

然后,安装Python3:

tar -zxvf Python-3.5.2.tgz

mkdir /usr/local/python3
cd Python-3.5.2
./configure --prefix=/usr/local/python3 # 将Python3安装在/usr/local/python3
make && make install # 编译安装 ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 创建python3软链接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 # 创建pip3软链接

安装完毕,可通过:

Python3 -V
pip3 -V

查看并检查安装的版本

源主机中打包项目文件

若项目中创建虚拟环境,首先激活虚环境,然后进入项目文件,执行:

pip3 freeze > requirements.txt

将当前项目中的库列表生成并保存在requirements.txt中。

然后,通过pip生成批量离线安装包(whl文件):

pip wheel --wheel-dir=./tmp/packages -r requirements.txt

执行完毕之后,你会发现/tmp/packages中包含了项目所需的所有.whl

打包项目文件:

zip A.zip A/

目标主机中部署

上传A.zip至目标主机,创建虚环境,并激活(python3 自带了venv):

python3 -m venv test_venv
cd test_venv
source bin/activate

解压项目代码A.zip,并切换:

unzip A.zip
cd A/

安装项目Python依赖模块:

pip3 install --no-index --find-links=tmp/packages -r requirements

安装完毕,检查:

pip3 freeze

当然你也可以通过python命令行import进行检验哈哈。

最后,执行项目启动脚本(startup.sh)部署:

chmod +x  ./startup.sh
nohup ./startup.sh > a-log 2>&1 &

以上,就完成了整个项目的迁移部署。

Python离线项目迁移部署的更多相关文章

  1. Python web项目Django部署在Ubuntu18.04腾讯云主机上

    Django2.1 + Python3.6 + nginx + uwsgi 部署到Ubuntu18.04 材料准备 准备一个Django项目 准备一台Ubuntu18.04的主机 ssh连接到主机(腾 ...

  2. Python基于Flask框架配置依赖包信息的项目迁移部署小技巧

    一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...

  3. GitHub Python项目推荐|瓦力Devops开源项目代码部署平台持续部署

    GitHub Python项目推荐|walle - 瓦力 Devops开源项目代码部署平台 项目热度 标星(star):8418 (很不错的实用项目,大神作品,建议关注) 标星趋势 关注(watch) ...

  4. NodeJS项目迁移兼Ubuntu下NodeJS环境部署

    前言 之前做的几个项目都托管在阿里云服务器,但是最近要到期了.想着到底要不要续期,毕竟100/月.后面看着阿里云有个活动,800/三年.果断买下.环境部署折腾了一天,其中也遇到几个坑. 目录 一.安装 ...

  5. 使用Nginx+Uwsgi部署Python Flask项目

    第一次用Flask做Web(也是第一次用Python做Web),在部署的时候遇到了不少问题,现在将过程就下来,供在这方面也有疑惑的人参考.(PS:使用Apache+mod_wsgi部署模式的可以参考另 ...

  6. Azure 项目构建 – 部署高可用的 Python Web 应用

    Python 以其优美,清晰,简单的特性在全世界广泛流行,成为最主流的编程语言之一.Azure 平台针对 Python 提供了非常完备的支持.本项目中,您将了解如何构造和部署基于 Azure Web ...

  7. Linux06 /Python web项目部署

    Linux06 /Python web项目部署 目录 Linux06 /Python web项目部署 1. 部署方式 2. 纯后端代码部署/CRM为例 1. 部署方式 2. crm项目详细部署步骤 3 ...

  8. 浅析Python项目服务器部署

    基础理论 关于Web服务器和应用服务器 基本概念: Web服务器主要功能就是存储.处理.传递网页,客户端和服务器之间基于HTTP协议进行通信. 应用服务器主要是处理动态请求,调用相应的对象完成对请求的 ...

  9. Python Django项目部署 Linux 服务器

    项目依赖: Linux Centos7 (阿里云轻量级服务器) + Python 3.7.2 + Django 2.2.1 + restframework 3.9.4 + mysql 5.7 1 安装 ...

随机推荐

  1. Qt 多线程QThread实现方法之一

    基本思想 在主线程中,哪里需用多线程,就在哪里创建一个QThread实例: 把耗时操作封装到一个继承于QObject的子类(这里叫做工作类Worker)槽函数中: 创建QThread实例和Worker ...

  2. log4j.xml配置,包含自定义log4j日志级别及输出日志到不同文件

      一.配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configura ...

  3. java集合 list与Set、Map区别

      1.List,Set都是继承自Collection接口,Map则不是. 2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉 ,(注意:元素虽 ...

  4. grep显示前后几行信息

    显示foo及前5行 1 grep -B 5 foo file 显示foo及后5行 1 大专栏  grep显示前后几行信息ode"> grep -A 5 foo file 显示 file ...

  5. spring入门(14)

    AOP是一个新的专题,基础部分主要是入门 后续的五.六.七都属于AOP专题: 所以有必要对这三章要学什么有个全局的认识. 1 概要 1 什么是AOP及实现方式 介绍了AOP的用途,以及大致的实现方案 ...

  6. 移动 H5 首屏秒开优化方案探讨

    转载bang大神文章,原文<移动 H5 首屏秒开优化方案探讨>,此文仅仅用做自学与分享! 随着移动设备性能不断增强,web 页面的性能体验逐渐变得可以接受,又因为 web 开发模式的诸多好 ...

  7. 创建git密钥

    前言 git使用https协议,每次pull,push都要输入密码,使用git协议,使用ssh秘钥,可以省去每次输密码 大概需要三个步骤: 一.本地生成密钥对: 二.设置github上的公钥: 三.修 ...

  8. C++扬帆远航——14(求两个数的最大公约数)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:gongyueshu.cpp * 作者:常轩 * 微信公众号:W ...

  9. Mariadb 修改root密码及跳过授权方式启动数据库

    默认情况下,yum方式新安装的 mariadb 的密码为空,在shell终端直接输入 mysql 就能登陆数据库. 如果是刚安装第一次使用,请使用 mysql_secure_installation ...

  10. web前端性能优化一

    作为一个前端会允许自己的作品,在非硬性条件下出现卡顿? 肯定是不会,所以给大家梳理一下前端性能的优化. 一:文件操作 html文件压缩: 删除无用的空格和换行符等其他无意义字符 css文件压缩: 删除 ...