如何将PyWebIO开发的BMI工具部署为可公网访问的永久地址
第一步:修正代码逻辑错误
你现有代码存在两处逻辑问题,会导致web服务无法正常启动:
bmi()直接在if __name__ == '__main__'代码块内执行,优先走了本地交互模式,没有启动web服务start_server()放在了主判断块外部,不会被正常执行
修正后的完整代码如下:
# 先执行安装依赖:pip install pywebio from pywebio.input import input, FLOAT from pywebio.output import put_text from pywebio import start_server def bmi(): height = input("Input your height(cm):", type=FLOAT) weight = input("Input your weight(kg):", type=FLOAT) BMI = weight / (height / 100) ** 2 top_status = [(16, 'Severely underweight'), (18.5, 'Underweight'), (25, 'Normal'), (30, 'Overweight'), (35, 'Moderately obese'), (float('inf'), 'Severely obese')] for top, status in top_status: if BMI <= top: put_text('Your BMI: %.1f. Category: %s' % (BMI, status)) break if __name__ == '__main__': start_server([bmi], host='0.0.0.0', port=8080)
第二步:公网访问配置方案
根据使用需求选择对应方案即可:
方案1:临时公网测试(无需额外服务器)
适合开发阶段临时分享使用,地址每次重启会变化,有效期数小时。
只需要在start_server参数中添加remote_access=True即可:
start_server([bmi], host='0.0.0.0', port=8080, remote_access=True)
启动后控制台会直接输出可用的公网访问地址,直接访问即可。
方案2:永久公网访问(需要带公网IP的云服务器)
适合正式对外提供服务使用,地址固定:
- 把修正后的代码上传到云服务器,执行
pip install pywebio安装依赖 - 确认云服务器的安全组/防火墙已经放行8080端口的入站规则
- 执行
nohup python3 你的代码文件名.py &后台启动服务,关闭SSH连接不会中断服务 - 直接通过
云服务器公网IP:8080即可访问服务,如有域名可以解析到服务器公网IP,搭配Nginx反向代理可实现无需端口号、HTTPS加密访问。
内容的提问来源于stack exchange,提问作者Cassie Chu
相关产品推荐
相关产品推荐

