部署python项目到linux服务器
最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是Mac系统,virtualenv环境下的库文件和linux上所需要的库不通用,所以不能简单的将整个env拷贝到服务器运行,需要做一些额外的工作。
一般每个不同的项目都会依赖各自的库,有些库的版本不一样会引起冲突,为了解决这个问题,需要使用虚拟环境,Python可以在每个项目目录下创建各自的虚拟环境,项目所依赖的包就在环境目录下,这样避免了库版本的冲突,也方便相同操作系统间可以快速的拷贝项目运行。
我使用的是Python3编写的项目,CentOS 7的服务器上只有Python2,所以需要先安装一下Python3的环境
第一步:安装Python3环境
1.首先安装编译环境(后续需要从python官网获取Python3的源码自己编译python)
1 |
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make |
2.从官网下载python3的源码
1 |
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz |
3.依次执行 解压>进入解压后的目录>编译安装
1 |
tar -xvJf Python-3.6.2.tar.xz |
4.安装完毕,创建软连接
1 |
ln -s /usr/local/python3/bin/python3 /usr/bin/python |
5.后续工作,由于执行CentOS的yum命令需要使用自带的python2的版本,所以需要做两处修改
1 |
vim /usr/bin/yum |
第二步:将本地开发环境的依赖项目生成清单文件
1.在本地的开发环境中,env下执行:
1 |
pip3 freeze >requirements.txt |
清单文件将会生成在当前项目目录下,内容如下所示
1 |
certifi==2018.4.16 |
将生成后的文件上传到linux服务器
2.将Python项目上传到服务器
1 |
#略... |
第三步:在linux服务器上为项目创建虚拟环境,并安装项目所需的依赖
1.切换到pip3所在的目录 /usr/local/python/bin,执行以下命令
1 |
# 安装虚拟环境 |
第四步:添加自定义系统服务(很重要)
1 |
# 这样的命令在ssh终端退出后,python进程也会被杀掉 |
需要创建一个自定义的系统服务,来保证python程序能够在后台运行。
1.创建系统服务
1 |
vim /usr/lib/systemd/system/robot.service |
内容如下:
1 |
[Unit] |
ExecStart为服务启动时执行的命令,不能用相对路径, 一定要全路径。
这里也可以将命令写到任意的.sh文件中,这里写.sh文件的全路径也是可以的。
2.启用自定义系统服务
1 |
systemctl enable robot |
3.启动服务
1 |
systemctl start robot |
可以查看进程,确认一下服务是否启动
1 |
ps aux|grep robot |
完毕!
最新文章
- 还原后缀名为.bak的数据库备份文件
- [LintCode] Trapping Rain Water 收集雨水
- asp值mysql驱动
- Java中事务的概念
- 《深入理解Spark:核心思想与源码分析》(前言及第1章)
- POJ 1917
- Nginx-限制汇总
- BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)
- theos的makefile写法
- JS定时器实例解析
- WCF 初识(一)
- Spring AOP + AspectJ Annotation Example---reference
- centos 6.X 安装输入法
- 简单的BFS学习笔记
- Zookeeper 笔记-应用场景
- numpy教程:快速傅里叶变换模块numpy.fft
- ISLR系列:(1)线性回归 Linear Regression
- [十二]基础数据类型之String
- oracle的部分增删查改
- oracle 如何查询/修改dmp文件的字符集
热门文章
- VBA 如何检测一个中文字符串是否包含在另一个字符串中
- openresty开发系列36--openresty执行流程之6日志模块处理阶段
- [译]Pandas列数据展示不全解决方法?
- [译]在你的GitHub主页固定仓库
- LeetCode_434. Number of Segments in a String
- CDH集群手动导入scm库
- 大网扫描在发现APT组织方面的一个应用
- php_mvc实现步骤八
- Mysql中类似于Oracle中connect by ... start with的查询语句(木大看懂)
- 《PHP - 信号/基本操作/配置》