CentOS 7部署Python项目:从环境配置到Systemd服务化
本文详细讲解在CentOS 7服务器上部署Python项目的完整流程。涵盖从编译安装Python3环境、解决yum依赖冲突,到使用virtualenv隔离依赖,最后通过Systemd配置后台服务以确保进程持久运行的关键步骤。
Python项目Linux部署背景与挑战
近期完成了一个Python开发的外挂程序,需将其部署至Linux服务器。由于本地Mac开发时使用了virtualenv虚拟环境,其优势在于依赖库仅作用于当前项目目录,不污染全局环境。然而,Mac下的虚拟环境库文件无法直接兼容Linux系统,因此不能简单拷贝整个env目录,必须执行额外的适配工作。
不同项目往往依赖不同版本的库,直接混用易引发版本冲突。Python支持为每个项目创建独立的虚拟环境,将依赖包安装在该环境目录下,从而有效避免库版本冲突,并便于在同一操作系统间快速迁移和运行项目。
CentOS 7环境配置:Python3安装与yum兼容处理
本项目基于Python3开发,而CentOS 7服务器默认仅预装Python2,因此首要任务是安装Python3运行环境。
第一步:安装Python3运行环境 1. 首先需安装编译所需的开发工具包(后续需从Python官网获取源码进行编译)。
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
2. 从Python官方网站下载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版本,因此需要修改两处配置文件以指向Python2。
vim /usr/bin/yum vim /usr/libexec/urlgrabber-ext-down #将 这两个文件的 #! /usr/bin/python修改为 #! /usr/bin/python2
依赖管理:生成清单与虚拟环境构建
第二步:生成本地开发环境的依赖清单文件 1. 在本地开发环境的虚拟环境中执行以下命令。
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
服务化部署:Systemd后台进程管理
第四步:添加自定义系统服务(关键步骤)
# 这样的命令在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
部署完成!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













