如何把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中处理字符串之islower()方法的使用简介
May 19 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
python对象转字典的两种实现方式示例
Nov 07 Python
python读取ini配置文件过程示范
Dec 23 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
Apr 30 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 Python
Python利用FlashText算法实现替换字符串
Mar 31 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
Webpack path与publicPath的区别详解
2018/05/03 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
利用python实现数据分析
2017/01/11 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
Django 在iframe里跳转顶层url的例子
2019/08/21 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
经典c++面试题六
2012/01/18 面试题
跳蚤市场口号
2014/06/13 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
研讨会通知
2015/04/27 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
python实现简单倒计时功能
2021/04/21 Python
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby