如何把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实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
python实现用户答题功能
Jan 17 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
python+splinter自动刷新抢票功能
Sep 25 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
python的pip有什么用
Jun 17 Python
Python中logger日志模块详解
Aug 04 Python
python把一个字符串切开的实例方法
Sep 27 Python
Python基于template实现字符串替换
Nov 27 Python
Python绘制散乱的点构成的图的方法
Apr 21 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
PHP5/ZendEngine2的改进
2006/10/09 PHP
PHP函数utf8转gb2312编码
2006/12/21 PHP
php获取某个目录大小的代码
2008/09/10 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP 断点续传实例详解
2017/11/11 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
JavaScript的Function详细
2006/11/14 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
大三学习计划书范文
2014/05/02 职场文书
森林防火宣传标语
2014/06/27 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
就业证明函
2015/06/17 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js