ModuleNotFoundError
在使用Python的Streamlit库进行开发时,如果你有在代码中引入其它.py文件中自定义函数的需求,代码编写不完善就会导致Streamlit找不到你的自定义函数所在的模块,引发报错。
报错界面
其中,sql_controller为自定义模块,我需要使用里面自定义的query函数,Streamlit找不到相关模块。
此时,sql_controller路径为“工程目录/dataflow/sql_controller.py”,Streamlit启动文件路径为“工程目录/font/sql_controller.py”。
Streamlit启动文件中的代码为:from dataflow.business import query_file_score
解决方案(任选其一)
- 模块文件与Streamlit在同一目录下 ;
- 规范编写代码 :dataflow文件夹下所有python代码文件之间在相互引用文件夹内部自定义函数代码时规范格式为:
from dataflow.sql_controller import XXX
,不要使用from sql_controller import XXX
。
附Streamlit启动脚本
start.py
import os
path = os.getcwd() # 获取绝对路径
path = path.replace("/", "\\") # 修改路径为命令行可正确识别的路径,replace要用双引号,否则会报错
os.system(f"cd {path} && streamlit run ./font/main.py")
代码注解:通过获取该Python文件所在路径,调用Windows CMD 执行Streamlit启动文件main.py,在Windows环境下可进一步使用.bat文件一键执行该脚本(python ./start.py)或将其封装为exe程序。