如何把python项目部署到linux服务器

 更新时间:2020年08月26日 08:33:47   作者:大牛等等我  
这篇文章主要介绍了如何把python项目部署到linux服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

最近用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设计模式中的备忘录模式

    这篇文章主要为大家详细介绍了Python设计模式中的备忘录模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Python实现感知器模型、两层神经网络

    Python实现感知器模型、两层神经网络

    这篇文章主要为大家详细介绍了Python实现感知器模型、两层神经网络,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Python中os.path模块的8个神奇函数分享

    Python中os.path模块的8个神奇函数分享

    在Python编程中,os.path模块是一个非常重要的模块,它提供了用于处理文件路径和目录的函数,本文将介绍os.path模块中最常用的8个内置函数,需要的可以参考下
    2023-11-11
  • Python中使用封装类还是函数以及它们的区别

    Python中使用封装类还是函数以及它们的区别

    在Python编程中,类和函数都是重要的代码组织工具,但它们在封装性、状态保持、可重用性、继承与多态、设计模式、代码组织、执行流程、参数传递、返回值和上下文管理等方面存在明显区别
    2024-10-10
  • Python爬取雪中悍刀行弹幕分析并可视化详程

    Python爬取雪中悍刀行弹幕分析并可视化详程

    这篇文章主要介绍了用Python爬虫+数据分析+数据可视化,分析《雪中悍刀行》弹幕,本文很适合初学python的同学入门阅读,需要的朋友可以参考下
    2022-01-01
  • 用python实现学生管理系统

    用python实现学生管理系统

    这篇文章主要为大家详细介绍了用python实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • python 函数的详解与应用范例

    python 函数的详解与应用范例

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数
    2021-11-11
  • python字典序问题实例

    python字典序问题实例

    这篇文章主要介绍了python字典序问题,是字符串操作一个比较典型的应用,需要的朋友可以参考下
    2014-09-09
  • Python内置加密模块用法解析

    Python内置加密模块用法解析

    这篇文章主要介绍了Python内置加密模块用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python编程之基于概率论的分类方法:朴素贝叶斯

    Python编程之基于概率论的分类方法:朴素贝叶斯

    这篇文章主要介绍了Python编程之基于概率论的分类方法:朴素贝叶斯,简单介绍了其概述,贝叶斯理论和条件概率,以及朴素贝叶斯的原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论