如何把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 07 Python
Python实现的彩票机选器实例
Jun 17 Python
详解 Python 读写XML文件的实例
Aug 02 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
Aug 30 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
python中的反斜杠问题深入讲解
Aug 12 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
django实现模型字段动态choice的操作
Apr 01 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
Python爬虫开发与项目实战
Dec 16 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获取表单textarea数据中的换行问题
2010/09/10 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
js中判断控件是否存在
2010/08/25 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
Node.js简单入门前传
2017/08/21 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
js实现图片粘贴到网页
2019/12/06 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python中zip和unzip数据的方法
2015/05/27 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
python 显示数组全部元素的方法
2018/04/19 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
Python配置文件处理的方法教程
2019/08/29 Python
python django中8000端口被占用的解决
2019/12/17 Python
美国翻新电子产品商店:The Store
2019/10/08 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
大学学雷锋活动总结
2014/06/26 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
先进个人事迹材料
2014/12/29 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
高一作文之乐趣
2019/11/21 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
详解PyTorch模型保存与加载
2022/04/28 Python
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL