目录
前言
在本地实现了一个python写的webapi,现在要部署到一个外网服务器测试,奈何服务器资源不是我的,而且配置很低。
之前我是搞过直接Linux下docker部署python,但是服务器配置很低可能没法搞docker,只能直接在Linux服务器部署python。
不过实际上,Linux直接部署、Linux下docker部署,差别不大的。
部署过程
安装python
目前比较稳定、兼容性好的版本就是3.10了。
注意如下命令在Linux服务器执行
// 安装python3.10
sudo apt install python3.10
// 查看python版本
python3.10 --version
收集依赖
定位到当前代码路径,cmd执行如下命令,会在当前代码路径下生成requestments.txt文件,里边就是代码依赖项以及对应版本号
注意如下命令在本地开发环境执行执行
pip freeze > requirements.txt
安装依赖
注意如下命令在Linux服务器执行
pip install -r requirements.txt
上传代码到服务器
我目前用的是WinSCP,个人觉得挺好用的
部署
可以有两种方式进行部署。一种是打包好直接服务器运行,再一个是直接拷贝代码到服务器,直接运行代码文件
打包部署
这里需要用到pyinstaller
首先需要安装pyinstaller:pip install pyinstaller
接下来就是通过pyinstaller打包程序,有两种打包方式:
pyinstaller --onefile your_program.py
pyinstaller --onedir your_program.py
如上两种方式的区别:onefile是生成一个文件,onedir是生成一个目录,相关依赖都是这个目录下
注意:在不同操作系统下,生成的文件是不同的,要在Linux服务器运行,那么也需要在Linux环境打包。Linux下生成的是无后缀的可执行文件。
直接运行代码
也就是直接python3 your_program.py
nohub使用
nohub可以在退出终端后继续运行程序。
注意,nohub不能保证系统重启后程序还可以自动运行。
要让系统重启还可以自动运行,可以使用systemd、cron等方式。
总结
最终结果
最终,我还是采用了直接运行代码的方式。
使用打包部署的方式一直没成功,主要问题在于,同一个服务器,直接运行代码没问题,但是打包部署运行,就提示缺包或找不到包的情况。看来,这里面需要学习研究的东西还有不少啊。
找不到包,主要是在代码中,我使用了相对引用(多个py文件存在引用)
更好的方法
更好的方式,还是使用docker部署,本地调试好了,直接将镜像迁移到服务器即可,免去了多次配置环境的问题。而且docker原生的解决了系统重启自动运行的问题。