如何把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 相关文章推荐
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
Python turtle绘画象棋棋盘
Aug 21 Python
Python代码块及缓存机制原理详解
Dec 13 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
Feb 23 Python
Django中FilePathField字段的用法
May 21 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 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多态的实现详解
2013/06/09 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
php创建类并调用的实例方法
2019/09/25 PHP
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
详解js的六大数据类型
2016/12/27 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
2017/12/26 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Python判断telnet通不通的实例
2019/01/26 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
归元寺导游词
2015/02/06 职场文书
小学教研工作总结2015
2015/05/13 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技