如何把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中基于生成器的状态机
Apr 13 Python
python单元测试unittest实例详解
May 11 Python
教你使用python画一朵花送女朋友
Mar 29 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Python基于pandas爬取网页表格数据
May 11 Python
keras中的backend.clip用法
May 22 Python
python3处理word文档实例分析
Dec 01 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
2021年最新用于图像处理的Python库总结
Jun 15 Python
Python中的socket网络模块介绍
Jul 23 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
微信小程序地图实现展示线路
2020/07/29 Javascript
Python脚本实现格式化css文件
2015/04/08 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
大专应届生个人简历的自我评价
2013/10/15 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
运动会入场词200字
2014/02/15 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server