如何优雅的部署Python应用到Linux服务器?
文章目录
- 1 前言
- 2 安装Python3环境
- 2.1 安装所需的编译环境
- 2.2 下载Python源码包
- 2.3 解压 python-3.9.5 源码包
- 2.4 安装 python3
- 2.5 设置软链接
- 3 部署python应用
- 3.1 将本地开发环境的依赖项目生成清单文件
- 3.2 将Python项目上传到服务器
- 3.3 为项目创建虚拟环境
- 3.4 启动python服务
- 3.5 本示例相关代码
1 前言
最近使用Python写了个小脚本,本地可以运行了,但是,如何把python脚本部署到Linux环境的服务器上呢?
废话不多说,直接上干货~~~
2 安装Python3环境
2.1 安装所需的编译环境
执行命令: yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
2.2 下载Python源码包
官网地址: https://www.python.org/
最新源码包下载地址: https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
这里,笔者以3.9.5
版本为例,执行命令,下载源码包: wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
2.3 解压 python-3.9.5 源码包
执行解压命令: tar -Jxvf Python-3.9.5.tar.xz -C /usr/local
-C表示将 python 源码包解压到那个目录下-J 解压命令(*.xz)注:tar.gz tar.bz2 tar.xz分别使用z、j、J解压-x 从 tar 包中把文件提取出来-v 解压时显示详细信息-f 指定解压文件
注: 这里源码包可以放在任意位置,后续安装成功后,这个解压源码包的内容可以删除的
2.4 安装 python3
切换至解压后的python主目录
执行命令:cd /usr/local/Python-3.9.5/
在python主目录Python-3.9.5下执行以下命令配置python:
./configure --prefix=/usr/local/Python-3.9.5
(其中–prefix是指定python的安装路径,这里使用的源码包安装方式,解压的是源码,安装到哪个位置使用--prefix
指定)编译安装python
执行命令:make && make install
可以使用这个命令查看, python3 是否安装成功了:
/usr/local/Python-3.9.5/bin/pip3 list
这里可以更新一下pip版本,非必须操作:/usr/local/Python-3.9.5/bin/python3.9 -m pip install --upgrade pip
,这时候版本是最新的了。
2.5 设置软链接
先查看下自己 centos 服务器的已安装的 Python 版本是哪个,执行命令:
python -V
笔者服务器是2.7.5
版本,所以需要设置软链接,把python执行到python3这个版本
,当然,如果你就想使用python2.x版本,可以不用设置。查看 python 可执行文件的路径
使用命令:which python
进入这个/usr/bin/
目录,执行ls -al python*
命令可以查看 python 文件
可以看到,笔者这里的 python 软链接指向了 python2 这个文件,我准备使用python3这个版本,所以,接下来将 python 这个软链接指向 python3 就行了。创建python软链接
现在就是需要将 python3 这个文件建立软连接,使 python 指向 python3 即可,首先执行命令mv python python.back
把原来的python做一个备份,然后执行命令:
ln -s /usr/local/Python-3.9.5/bin/python3.9 /usr/bin/python
若找到 python 这个指向为红色显示的,证明创建错误了,python3 的地址错误了,需要重新删除python后重新指定(这里笔者故意指定错误,给老铁们演示下错误的效果):
再次查看现在的python版本,python -V
将会看到python3的版本,执行python2 -V
命令,将会看到python2的版本:
至此,python3基础环境就安装完成了,下面开始部署python应用
3 部署python应用
3.1 将本地开发环境的依赖项目生成清单文件
在本地的开发环境中,env下执行:
pip3 freeze >requirements.txt
清单文件将会生成在当前项目目录下,内容如下所示:
APScheduler==3.7.0 pytz==2021.1 six==1.16.0 tzlocal==2.1
将生成后的文件上传到Linux服务器
3.2 将Python项目上传到服务器
这里可以使用wincp软件,或者直接使用rz
命令都可以,把python项目上传到Linux服务器上
3.3 为项目创建虚拟环境
一般每个不同的项目都会依赖各自的库,有些库的版本不一样会引起冲突,为了解决这个问题,需要使用虚拟环境,Python可以在每个项目目录下创建各自的虚拟环境,项目所依赖的包就在当前目录环境下,这样避免了库版本的冲突,也方便相同操作系统间可以快速的拷贝项目运行。
在Linux服务器上为项目创建虚拟环境,并安装项目所需的依赖
切换到pip3所在的目录,执行以下命令:cd /usr/local/Python-3.9.5/bin
安装虚拟环境
pip3 install virtualenv
执行命令是出现:bash: pip: command not found..
.这时候怎么办呢???
做一个软连接即可,首先查下安装路径:
find / -name pip
,笔者的路径为/usr/local/Python-3.9.5/bin/pip3
然后做个软连接:
ln -sv /usr/local/Python-3.9.5/bin/pip3 /usr/bin/pip3
然后再次执行:
pip3 install virtualenv
为了便于操作,添加virtualenv的软链接:
ln -sv /usr/local/Python-3.9.5/bin/virtualenv /usr/bin/virtualenv
注意:这里使用的是 pip3,若是直接使用 pip 则对应的是 python2 版本的
创建虚拟环境 /opt/project/python
执行命令:virtualenv /opt/project/python/test-python
切换到虚拟环境所在的目录
执行命令:cd /opt/project/python/test-python
启用虚拟环境
执行命令:source ./bin/activate
安装依赖清单里的库
执行命令:pip3 install -r /opt/project/python/test-python/requirements.txt
列出当前虚拟环境所安装的依赖库
执行命令:pip3 list
在指定环境下完成任务后关闭虚拟环境
这样一来在运行python就是全局的python环境,在虚拟环境下执行命令:
deactivate
注:这里面有的依赖可能不存在,可以切换不同的镜像尝试
使用命令:
cd /root/.pip && vim ./pip.conf
## Note, this file is written by cloud-init on first boot of an instance ## modifications made here will not survive a re-bundle. [global] index-url=http://mirrors.aliyun.com/pypi/simple/,http://pypi.hustunique.com/simple/,http://pypi.sdutlinux.org/simple/,http://pypi.mirrors.ustc.edu.cn/simple/,http://pypi.douban.com/simple/[install] trusted-host=mirrors.aliyun.com,pypi.hustunique.com,pypi.sdutlinux.org,pypi.mirrors.ustc.edu.cn,pypi.douban.com
常见国内镜像源:
豆瓣: http://pypi.douban.com/simple/
阿里: http://mirrors.aliyun.com/pypi/simple/
华中理工大学: http://pypi.hustunique.com/simple/
山东理工大学: http://pypi.sdutlinux.org/simple/
中国科学技术大学: http://pypi.mirrors.ustc.edu.cn/simple/尝试了上面的方法,还是有好多下载失败的,不得不采用离线方式:
ERROR: Could not find a version that satisfies the requirement APScheduler==3.7.0 (from versions: none) ERROR: No matching distribution found for APScheduler==3.7.0
项目中,导出依赖包:
pip freeze > requirements.txt
在项目中,下载依赖的离线包,然后上传到服务器:
pip download -r ./requirements.txt -d ./dependencies
把离线包上传到Linux服务器上,安装依赖包:
pip install --no-index --find-links=./dependencies -r requirements.txt
其中,--find-links
指定的是包文件的存放地址,-r
指定的是txt文件的位置
3.4 启动python服务
使用以下命令,启动python服务:
nohup python main.py
至此,基础的应用部署就完成了,实际上,python部署应用确实复杂的多,以上这种部署应用的方式不是很方便,后续有机会在完善吧~
3.5 本示例相关代码
#!/usr/bin/python3
# coding=utf-8import datetimefrom apscheduler.schedulers.background import BlockingSchedulerdef timedTask():print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])'''
新建一个 schedulers (调度器) 。
添加一个调度任务(job stores)。
运行调度任务。
'''
if __name__ == '__main__':# 创建后台执行的 schedulersscheduler = BlockingScheduler()# 添加调度任务# 调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒scheduler.add_job(timedTask, 'interval', seconds=2)# 启动调度任务scheduler.start()
参考资料:
https://www.jb51.net/article/194150.htm
https://blog.csdn.net/sergiojune/article/details/88076805
写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!
如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!
给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!
如何优雅的部署Python应用到Linux服务器?相关推荐
- 如何将python项目部署到服务器_部署python项目到linux服务器
第一步:安装Python3环境 1.首先安装编译环境(后续需要从python官网获取Python3的源码自己编译python) 1 yum install zlib-devel bzip2-devel ...
- (云服务器学习)部署python程序到云服务器
(云服务器学习)部署python程序到云服务器 我本来好早就买了阿里云的服务器,以前叫做学生机,现在好像叫云翼计划,我感觉每年花个不到百元能玩玩也挺不错的.还能在上面搭建个人博客,跑跑程序,以后还能学 ...
- Python ssh连接Linux服务器报Incompatible ssh peer (no acceptable kex algorithm) 解决方法
Python ssh连接Linux服务器报Incompatible ssh peer (no acceptable kex algorithm) 解决方法 参考文章: (1)Python ssh连接L ...
- scrapyd部署爬虫项目到LINUX服务器
1,首先把scrapy爬虫项目上传到服务器 我的服务器架设在公司内网里.所以在这里使用WinSCP作为上传工具. 2,修改项目的配置文件scrapy.cfg 给爬虫项目指定分组,具体方法是在deplo ...
- linux 多线程端口扫描,python 多线程完成linux服务器端口扫描
人性化交互式python脚本,采用多线程方式完成linux服务器开放端口扫描: 以下为完整代码: #!/usr/bin/env python #-*- coding: UTF-8 -*- #func ...
- 如何将SpringBoot项目部署到阿里云Linux服务器中
在此之前,我写了一个如何购买阿里云Windows服务器,并将自己的SpringBoot项目部署到Windows云服务器的博客,链接如下:https://blog.csdn.net/MagicMHD/a ...
- 部署饥荒联机版Linux服务器
此文为 Docker 版饥荒联机版服务器在 CentOS 下的部署教程. 为什么要部署Linux服务器?因为玩到后面,只要一联机连主机都卡,闲得想试 这个中文教程讲了native steam版的安装方 ...
- Linux服务器部署ssl证书教程,linux服务器在wdcp面板安装ssl证书教程
不少站长如今越来越在意站内数据传输的安全性,想着把自己建设的网站加密传输,许多站长都需要安装ssl证书,且很多站长都在找寻centos系统服务器linux服务器或者是wdcp面板怎么安装ssl证书,网 ...
- linux部署python web_在linux上部署web环境
1.升级python到2.7版本(通过源码包重新安装一个2.7版本的python): wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9 ...
最新文章
- Python20-Day05
- php 读取excel转html,PHPExcel 转HTML
- Android 4.0新增WiFiDirect功能
- fastq质量值_fastq 数据格式解析
- 网管型工业交换机的三大指标介绍
- uva 1613——K-Graph Oddity
- Kotlin学习笔记 第二章 类与对象 第七节 数据类
- 使用函数求余弦函数的近似值_WPS-Excel表格实用技巧-排名函数RANK函数的使用
- C# 语言历史版本特性(C# 1.0到C# 8.0汇总)
- 程序员如何掌握 React 开发的黄金法则? | 技术头条
- 3月25日 插值-样条插值
- 前端软件开发短期培训需要多长时间
- 西湖大学教授怎么看AI制药革命?|量子位智库圆桌实录
- 【产品运营从0到1】资深产品运营推荐的互联网产品运营人员必看书籍
- fiddler启动后浏览器不能上网问题解决
- Java-springboot生鲜电商项目(一)数据设计与项目初始化
- 华为手机各代系拆机图
- 数字用计算机写大写,微信小程序学习用:大写计算器;数字转换为大写
- pyinstxtractor 源码分析及填坑
- shell中将字符串转换成数字
热门文章
- compu.vue:5 Uncaught TypeError: ‘set‘ on proxy: trap returned falsish for property ‘fullname‘
- 【Shell】各种引号的使用
- 全境封锁服务器维护多长时间,《汤姆克兰西:全境封锁》3.22日服务器例行维护一览...
- 图像局部均值、中值、方差求取结合opencv
- JS 保留小数点后面2位小数
- [附源码]java+ssm计算机毕业设计java未来新型养老院管理系统7vhm1【源码、数据库、LW、部署】
- 揭秘家用路由器0day漏洞挖掘技术读书笔记 D-Link DIR-505 my_cgi.cgi溢出漏洞分析
- DNS的解析顺序,以及判断DNS污染
- vue与elementUI电商后台管理系统笔记05
- 大胡子的编程语言更流行?