宝塔Linux部署python常遇问题解决

以下是我在部署基于 Streamlit 开发的 Python 项目时候遇到的一些问题。

一、打开外网映射,但端口未显示

1.1 排查

1. Nginx 配置

  • 检查宝塔 Nginx 是否正常启动,无报错重启;
  • 确认 Nginx 代理配置中,绑定的端口与 Streamlit 启动端口完全一致
  • 检查代理路径、反向代理规则是否配置正确。

2. 检查防火墙/安全组端口是否放行

  • 宝塔面板:安全 → 防火墙,放行 Streamlit 使用的端口(如 8501);
  • 腾讯云:额外添加入站规则,放行对应端口;
  • 本地服务器防火墙:关闭或放行指定端口。

3. 安装的库版本不兼容!

宝塔部署Python项目时,优先用固定版本号安装依赖,不要用 --upgrade直接升级到最新版。例如项目根目录创建requirements.txt,锁定所有依赖版本,避免环境混乱:

(例)requirements.txt:

numpy==1.26.4

pandas==2.2.2

streamlit==1.35.0
小注意点:

服务器部署OpenCV项目,优先安装opencv-python-headless,不要用完整版(opencv-python)

二、显示use_container_width 用不了问题

streamlit 的导入: import streamlit as st

use_container_width 是Streamlit 1.30.0+ 版本才新添的参数(图片自适应参数),如果Streamlit 的版本低于这个,就会导致图片加载失败而导致报错。

1. 解决法1

升级Streamlit 版本。

|----------------|------------------------------------|----------------------------|
| 组件 | 支持的宽度相关参数 | 不支持的参数 |
| st.image() | width=0 / use_container_width=True | 无 |
| st.button() | 无 | width/ use_container_width |
| st.container() | border | 无 |
[streamlit不同组件的参数]

2. 解决法2

直接修改代码--->找到所有使用 "st.image()" 并且带有 "use_container_width=True" 的代码块,移除掉:use_container_width=True

三、网页的图表文字未正常显示

图表不显示文字、中文变方框。

3.1 排查问题:

  1. Linux服务器没有配备正确的中文字体

  2. 图表元素没有强制绑定中文字体,导致全局配置不生效

3.2 解决:直接嵌入字体文件!

1)从你的本地Windows电脑,复制 C:/Windows/Fonts/simhei.ttf(黑体),其他字体也行;

可以把它复制粘贴到桌面先,方便一会儿上传到宝塔项目文件根目录。

2)通过宝塔面板,上传到你要部署的项目根目录,和 .py文件 同文件夹

3)代码里面使用

python 复制代码
import matplotlib
import matplotlib.pyplot as plt
from pathlib import Path

# 字体文件路径 = 项目根目录的 simhei.ttf
FONT_PATH = "/www/wwwroot/代码/simhei.ttf"    # 这个是我的项目目录

# 使用项目内字体
matplotlib.rcParams['font.sans-serif'] = [FONT_PATH]
matplotlib.rcParams['axes.unicode_minus'] = False
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['font.size'] = 10

注意:上面代码是在全局定义的,我们要注意和局部使用对上,在后面代码要使用上图表的位置处,我们可以直接把字体路径写在图表里。

python 复制代码
from matplotlib.font_manager import FontProperties

# 字体绝对路径
font = FontProperties(fname='/www/wwwroot/你的项目目录/simhei.ttf', size=12)

# 绘图时指定字体
plt.title("图表标题", fontproperties=font)
plt.xlabel("X轴", fontproperties=font)
plt.ylabel("Y轴", fontproperties=font)

Ctrl+Shift+R:浏览器强制刷新(Windows/Linux)

相关推荐
abc123456sdggfd2 分钟前
Layui表单验证失败时如何修改默认弹出的Tips气泡颜色
jvm·数据库·python
MasonYyp4 分钟前
基于Python可定制开发的智能体框架
开发语言·python
橘颂TA19 分钟前
【Linux】读写锁
大数据·linux·开发语言·c++·读写锁
lv__pf31 分钟前
集合框架1
java·开发语言
weixin_4249993634 分钟前
PHP源码在双硬盘系统如何优化_硬件存储分配建议【指南】
jvm·数据库·python
qq_1898070342 分钟前
json ignore反序列化?_?JSON反序列化时忽略字段的json----标签使用方法.txt
jvm·数据库·python
zhangchaoxies42 分钟前
让水平滚动条始终固定在页面底部,实现跨视口的横向滚动控制
jvm·数据库·python
justjinji1 小时前
如何用组合继承模式实现父类方法复用与子类属性独立
jvm·数据库·python
We་ct1 小时前
LeetCode 64. 最小路径和:动态规划入门实战
开发语言·前端·算法·leetcode·typescript·动态规划
CoderCodingNo1 小时前
【CSP】CSP-J 2019 江西真题 | 次大值 luogu-P5682 (适合GESP四、五级及以上考生练习)
开发语言·c++·算法