如何把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的urllib模块显示下载进度示例
Jan 17 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
Sublime开发python程序的示例代码
Jan 24 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
Python动态语言与鸭子类型详解
Jul 01 Python
Python 一键获取百度网盘提取码的方法
Aug 01 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 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 printf() 输出格式化的字符串
2016/05/23 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
javascript实现图片轮换动作方法
2020/08/07 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
jupyter notebook 重装教程
2020/04/16 Python
python中if及if-else如何使用
2020/06/02 Python
Python用Jira库来操作Jira
2020/12/28 Python
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
游戏商店:Eneba
2020/04/25 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
四种会话跟踪技术
2015/05/20 面试题
父母对孩子的寄语
2014/04/09 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
中学推普周活动总结
2015/05/07 职场文书
小学运动会入场词
2015/07/18 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
Java Spring读取和存储详细操作
2022/08/05 Java/Android