如何把python项目部署到linux服务器


Posted in Python onAugust 26, 2020

最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是Mac系统,virtualenv环境下的库文件和linux上所需要的库不通用,所以不能简单的将整个env拷贝到服务器运行,需要做一些额外的工作。

一般每个不同的项目都会依赖各自的库,有些库的版本不一样会引起冲突,为了解决这个问题,需要使用虚拟环境,Python可以在每个项目目录下创建各自的虚拟环境,项目所依赖的包就在环境目录下,这样避免了库版本的冲突,也方便相同操作系统间可以快速的拷贝项目运行。

我使用的是Python3编写的项目,CentOS 7的服务器上只有Python2,所以需要先安装一下Python3的环境

第一步:安装Python3环境
1.首先安装编译环境(后续需要从python官网获取Python3的源码自己编译python)

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

2.从官网下载python3的源码

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

3.依次执行 解压>进入解压后的目录>编译安装

tar -xvJf Python-3.6.2.tar.xz
cd Python-3.6.2
./configure prefix=/usr/local/python3
make && make install

4.安装完毕,创建软连接

ln -s /usr/local/python3/bin/python3 /usr/bin/python
# 执行命令
python -V #将会看到python3的版本
# 执行命令
python2 -V #将会看到python2的版本

5.后续工作,由于执行CentOS的yum命令需要使用自带的python2的版本,所以需要做两处修改

vim /usr/bin/yum
vim /usr/libexec/urlgrabber-ext-down
#将 这两个文件的 #! /usr/bin/python修改为 #! /usr/bin/python2

第二步:将本地开发环境的依赖项目生成清单文件
1.在本地的开发环境中,env下执行:

pip3 freeze >requirements.txt

清单文件将会生成在当前项目目录下,内容如下所示

certifi==2018.4.16
chardet==3.0.4
idna==2.7
requests==2.19.1
urllib3==1.23

将生成后的文件上传到linux服务器

2.将Python项目上传到服务器

第三步:在linux服务器上为项目创建虚拟环境,并安装项目所需的依赖
1.切换到pip3所在的目录 /usr/local/python/bin,执行以下命令

# 安装虚拟环境
pip3 install virtualenv

# 创建虚拟环境 ENV
virtualenv ENV

# 切换到虚拟环境所在的目录
cd ENV

# 启用虚拟环境
source ./bin/activate

# 安装依赖清单里的库
pip3 install -r requirements.txt

# 列出当前虚拟环境所安装的依赖库
pip3 list

第四步:添加自定义系统服务(很重要)

# 这样的命令在ssh终端退出后,python进程也会被杀掉
python xxx.py &

需要创建一个自定义的系统服务,来保证python程序能够在后台运行。

1.创建系统服务

vim /usr/lib/systemd/system/robot.service

内容如下:

[Unit]
Description=robot
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/python3/bin/ENV/bin/python /usr/local/python3/bin/ENV/p3.py &
PrivateTmp=true

[Install]
WantedBy=multi-user.target

ExecStart为服务启动时执行的命令,不能用相对路径, 一定要全路径。
这里也可以将命令写到任意的.sh文件中,这里写.sh文件的全路径也是可以的。

2.启用自定义系统服务

systemctl enable robot

3.启动服务

systemctl start robot

可以查看进程,确认一下服务是否启动

ps aux|grep robot

完毕!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python读取csv文件示例(python操作csv)
Mar 11 Python
Python判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python实现简单遗传算法(SGA)
Jan 29 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
使用python制作一个为hex文件增加版本号的脚本实例
Jun 12 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
python实现图像全景拼接
Mar 27 Python
如何在Python项目中引入日志
May 31 Python
python保存图片的四个常用方法
Feb 28 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 #Python
python 多线程死锁问题的解决方案
Aug 25 #Python
详解Pycharm与anaconda安装配置指南
Aug 25 #Python
Python如何爬取51cto数据并存入MySQL
Aug 25 #Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 #Python
Python使用requests模块爬取百度翻译
Aug 25 #Python
Python爬虫使用bs4方法实现数据解析
Aug 25 #Python
You might like
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python Pandas 箱线图的实现
2019/07/23 Python
python word转pdf代码实例
2019/08/16 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
岗位廉政承诺书
2014/03/27 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL
讲解Python实例练习逆序输出字符串
2022/05/06 Python
如何利用python实现列表嵌套字典取值
2022/06/10 Python