使用flet run从终端运行Flet应用时出现ModuleNotFoundError,但PyCharm中运行正常
嗨,这个问题我之前也碰到过,本质是PyCharm和终端的Python模块搜索路径(sys.path)不一样导致的。PyCharm会自动帮你把项目相关的目录加到Python的搜索路径里,但终端用flet run的时候不会自动做这件事,所以Python找不到legajos_automaticos这个顶层模块。
先给你拆解下原因:你的main.py里用了from legajos_automaticos.src.app_layout import AppLayout这种绝对导入,PyCharm默认把proyectos_flet/目录(也就是legajos_automaticos/的父目录)加到了sys.path里,所以能找到这个模块;但终端里运行flet run时,这个目录没被自动加入,Python自然就找不到了。
下面给你几个实用的解决方案,按推荐程度排序:
方案一:用可编辑安装(最推荐,长期项目必备)
这个方法能让你的项目在任何环境下都保持一致的导入路径,和PyCharm的运行逻辑对齐:
- 先激活你的虚拟环境
.venv - 切换到
legajos_automaticos/目录(就是有pyproject.toml的那个目录) - 运行命令:
这个命令会把你的项目以"可编辑模式"安装到虚拟环境里,相当于告诉Python:这个目录下的pip install -e .legajos_automaticos是一个可直接导入的包。 - 之后不管你在哪个目录下,直接运行
flet run -d src/main.py(或者指定完整路径flet run -d C:\Users\ricar\proyectos_flet\legajos_automaticos\src\main.py)都不会再报错了。
方案二:临时设置PYTHONPATH环境变量
如果你只是想快速测试,不想修改项目配置,可以临时把父目录加到Python的搜索路径里:
- 激活虚拟环境后,在PowerShell里运行:
(如果是CMD的话,用$env:PYTHONPATH = "C:\Users\ricar\proyectos_flet"set PYTHONPATH=C:\Users\ricar\proyectos_flet) - 然后在
legajos_automaticos/目录下运行:
注意:这个设置只在当前终端窗口有效,关闭后就失效了。flet run -d src/main.py
方案三:改用相对导入
如果你的项目结构比较简单,也可以修改main.py里的导入语句,换成相对路径:
把from legajos_automaticos.src.app_layout import AppLayout改成:
from .app_layout import AppLayout
因为main.py和app_layout.py在同一个src/目录下,都是src包的一部分(已经有__init__.py),所以相对导入是可行的。不过这种方式如果后续项目结构变动,可能需要调整大量导入语句,适合小型项目临时用。
你可以根据自己的需求选一个,个人最推荐方案一,一劳永逸解决路径问题~
备注:内容来源于stack exchange,提问作者Ricman1029

