2 个回答
非专业码农,对各种系统并不了解,最近有需求做个python web小项目 苦于没前端知识,Django,flask什么的都放弃选择,使用streamlit。
以下内容为笔记,记录宝塔部署streamlit,仅供参考!至于效率与安全,自行甄别!
本文3984字,阅读完可能需要15分钟左右!
系统:
阿里云服务器 Centos 7.9 自行安装的宝塔面板
宝塔安装好以后,其实你已经有连个版本的python啦,终端输入python出现2.7的版本,这应该是系统自带的,输入btpython出现3.7这是宝塔面板自带的,面板依赖这个3.7!
虽然直接可以做个虚拟环境来用,但python2我不会,3.7也不符合需求,我要的是3.9!
安装python3.9
安装
其他版本,参考修改即可
终端指令:下面指令都是在root权限下执行
# 下载3.9 wget url
wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz
# 解压缩 tar file
tar zxvf Python-3.9.10.tgz
# 进入解压文件夹 cd
cd Python-3.9.10
# 加载配置
./configure
# 执行安装
make && make install
等待安装完成!
终端输入:python3 弹出3.9 说明安装成功
制作虚拟环境
可以先修改下镜像源,参考:
使用python virtualenv制作虚拟环境。
安装virtualenv:
python3 -m pip install virtualenv==x.x.x
缺省==与后面的内容,默认安装最新版本
cd 到你要放虚拟环境的文件夹下终端执行
# 创建虚拟环境 文件夹叫env_file 版本python3.9 具体根据自己需求来
virtualenv env_file --python=3.9
可以不指定python版本,注意,指定版本的话,需要系统有相应的解释器,如果指定虚拟环境为python3.9则系统要安装有python3.9,否则报错,找不解释器!
激活虚拟环境
激活虚拟环境需要使用绝对地址,列如我的虚拟环境路劲是
根目录/www/python/env_file
终端指令:
# 正确 进入激活虚拟环境
source /www/python/env_file/bin/activate
# 错误方式1 进入激活虚拟环境
cd /www/python/env_file
source /bin/activate
# 错误方式2 进入激活虚拟环境
source .../activate
只有第一种 正常进入,其他两种都失败,也许是我太菜!
但使用 绝对路径每次都很烦,调试的时候会毛躁,这里推荐使用软连接!
软连接:
软连接可以简单理解为win系统的快捷方式,连接名可以指向文件夹或者文件
三个简单的指令:
# 查看软连接
ls -l
# 制作软连接
# ln -s 源文件夹or源文件(需要绝对路径) 链接名(需要绝对路径)
ln -s /www/python/env_file/bin/activate /root/my_env39_activate
# 删除软连接 rm 连接名 或者 unlink 连接名
# 推荐使用后者 如果不是在链接名所在的目录下执行 连接名应填写好路径
unlink myenv_activate
宝塔终端打开就是就是root目录 所以连接名我放在root下 打开直接用,也可以直接把放在其他目录的项目路径也做成软连接,例如 :
ln -s /www/python/env_file/project/ /root/project
安装依赖
以下内容都是根据上面的软连接进行,上面的软连接与及路径是我瞎编的,请自行根据你自己的内容,带入下方菜鸟内容!
根据我们的软连接继续往下执行,root目录下激活虚拟环境
# 激活虚拟环境
source my_env39_activate
# 进入成功 会在当前指令行前端 有括号 括起显示 我们的虚拟环境目录 (env_file)
# 这时可直接用pip 执行 pip freeze > requirements.txt 项目中 打包的依赖
pip freeze > requirements.txt
pip install 包名==x.x.x
# 列如给当前虚拟环境装 streamlit 不指定版本 默认最新版
pip install streamlit
依赖 装完啦,记得导入自己的项目上去服务器!
调试
依赖以项目准备完毕,现在调试,通俗讲就是看能不能跑。。。
上面笔者也已说过,把项目做成软连接,所以这里启动也会直接用软连接
运行streamlit:
# 先进入虚拟环境
source my_env39_activate
# streamlit 运行项目 a.py 指定端口 8000 不指定就是默认端口是 8051
streamlit run project/a.py --server.port 8000
如果终端没报错弹出ip地址+端口123,说明成功,直接复制到浏览器打开就能看到你的项目啦!
问题
如果打不开,请到宝塔 安全 放行相应 端口
如果终端运行报错:urllib3 ssl问题
这里没截图了,大概记得翻译的意思是urllib3版本v2以后不兼容问题
# 查看 当前虚拟环境的模块与库 库名和版本等
pip list
# 卸载urllib3
pip uninstall urllib3
# 指定版本安装 v2以下的 urllib3 我用的是 1.26.15 没问题
pip install urllib3==1.26.15
其他问题参考终端的报错解决,我这里因为没真的跑项目,只是简单的运行streamlit,所以没啥大问题!
提示:
streamlit 运行时没指定端口的话,默认会从8501端口开始,你启动第一个是8501,第二个是8502,不注意你可能会启动了一堆streamlit,所以养成指定端口的习惯避免发生其他未知问题,
固定端口,也会出现端口被占用,可能是之前的进程没正常退出,也可能某个不需要继续的进程在占用,下列几个指令处理端口:
# 查看所有进程
ps -axu
# 端口查进程 会返回当前在使用该端口的进程信息,例如进程pid等等
netstat -lntp | grep 端口号
# 喝酒杀 上方的端口号查进程能查到pip 下面这个指令则能通过pid杀死进程
kill -9 进程pid
不挂起nohup
终端关闭了,或者退出,依然让我们的项目不掉线,也就是终端依然运行着我们的项目,为啥叫不挂起?我也不知道,原名 叫 no hang up(来源网络)
用法 nohup 指令 &
之后 终端的输出会都写入当前目录下这个 nohup.out 文件 例如报错信息等等
也可以 nohup 指令 > log_s.log &
之后 终端的输出会都写入当前目录下这个 log_s.log 文件
nohup : 不挂起
指令: 你的指令
&: 挂在后台
接着 exit 正常退出终端
如果不用exit指令正常退出, 强制关闭终端有可能会有问题
后台运行streamlit
# 先进入虚拟环境
source my_env39_activate