如何把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 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
python开发中module模块用法实例分析
Nov 12 Python
python导出hive数据表的schema实例代码
Jan 22 Python
Python 实现选择排序的算法步骤
Apr 22 Python
pandas中去除指定字符的实例
May 18 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 Python
python3实现无权最短路径的方法
May 12 Python
Python实现机器学习算法的分类
Jun 03 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 session安全问题分析
2011/06/24 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
Python解析xml中dom元素的方法
2015/03/12 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
python的继承知识点总结
2018/12/10 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
客服主管岗位职责
2013/12/13 职场文书
法学院毕业生求职信
2014/06/25 职场文书
秋季运动会开幕词
2015/01/28 职场文书
民事辩护词范文
2015/05/21 职场文书
指导教师推荐意见
2015/06/05 职场文书
2016年校长新年寄语
2015/08/17 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
python实现简易名片管理系统
2021/04/11 Python