如何把python项目部署到linux服务器
作者:大牛等等我 发布时间:2023-10-02 14:27:22
最近用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
完毕!
来源:https://www.cnblogs.com/dayongge/p/13501590.html


猜你喜欢
- 使用Tkinter模块来创建简单的GUI程序。Tkinter的Widgets有:Button、Canvas、Checkbutton、Entr
- 笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF。比如,需要把Python字符串‘这是测试文件'生成为P
- 目前任务需要做一个界面程序,PyQt是非常方便的选择,QT丰富的控件以及python方便的编程。近期遇到界面中执行一些后台任务时界面卡死的情
- mysql_query("set autocommit=0"); $list_one = $db->fetch_f
- 需求描述有时候我们会基于已有数据生成一列在表格中,类似于下面的class BaseSchema(models.Model): ... def
- 问题:如何把具有相同字段的记录删除,只留下一条。 例如:表test里有id,name字段,如果有name相同的记录只留下一条,
- 前言首先抛出几个问题:console.log(Boolean({}));console.log(Number([]));console.lo
- 前言Python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫
- 实现效果实现代码import matplotlib.pyplot as pltfrom skimage import iofile_name
- 前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样
- 尽管可能是个比较老的话题了,但是我还是从来没有整理过。今天在《精通HTML》一书中看到,这里整理一下。在XHTML中,<html>
- 方法一、自定义函数实现,不方便自定义调用function FillZero(p) {return new Array(3 - (p +
- 本文实例讲述了GO语言实现简单的目录复制功能。分享给大家供大家参考。具体实现方法如下:创建一个独立的 goroutine 遍历文件,主进程负
- 前言 本篇文章介绍一下 Pycharm 如何配置远程连接信息,使其能够在本地使用服务器上的GPU等硬件资源,并在本地完成代码的运行与调试。
- 区别:xx:公有变量,所有对象都可以访问;xxx:双下划线代表着是系统定义的名字。__xxx:双前置下划线,避免与子类中的属性命名冲突,无法
- 实时读取logstash日志,有异常错误keywork即触发报警。# /usr/bin/env python3# -*- coding: u
- 一、什么要备份数据库 ?在现实IT世界里,我们使用的服务器硬件可能因为使用时间过长,而发生故障;Windows系列服务器有可能蓝屏或者感染病
- 效果如下所示简介在当今信息时代,金融市场是一个引人注目的话题。作为普通人,我们也可以通过使用 Python 和 wxPython 库编写一个
- 本文实例为大家分享了JS编写简单选项卡的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html lan
- 对于一个内容页的文章来说,如果这个文章内容过长或是其中有分类(排行),那么进行分页阅读无疑是最好的选择。如果一个文章内容不涉及分类,比如小说