Flet v0.23.2在MacOS下访问assets文件触发PathAccessException求助
解决Flet v0.23.2在MacOS下读取assets文件的权限错误
针对你遇到的PathAccessException: Operation not permitted错误,结合MacOS的权限特性,给你几个可行的排查和解决步骤:
1. 检查MacOS隐私权限
MacOS的沙箱机制可能阻止运行脚本的终端/IDE访问文件目录:
- 打开「系统设置」→「隐私与安全性」→「文件与文件夹」
- 找到你用来运行脚本的程序(比如Terminal、VS Code),确保它被授予了访问assets目录所在父文件夹的权限
- 重启该程序后再尝试运行脚本
2. 确认assets路径与Flet配置匹配
方式一:通过代码指定assets_dir
确保assets_dir路径是相对于脚本的正确路径,同时Image的src不要带/assets前缀:
import flet as ft def main(page: ft.Page): page.title = "Images Example" page.theme_mode = ft.ThemeMode.LIGHT page.padding = 50 page.update() img = ft.Image( src="icon.png", # 直接写文件名,无需/assets前缀 width=100, height=100, fit=ft.ImageFit.CONTAIN, ) images = ft.Row(expand=1, wrap=False, scroll="always") page.add(img, images) page.update() ft.app(target=main, assets_dir="assets") # assets目录需与脚本同层级
方式二:通过命令行指定assets路径
运行时直接传入正确的assets目录路径(无需占位符):
flet run -a ./assets myapp.py
如果assets在脚本的父目录,就写../assets,确保路径准确。
3. 验证文件与目录的实际可访问性
- 用终端进入脚本所在目录,执行
cat assets/icon.png,如果能正常输出文件内容,说明文件本身权限没问题;如果报错,检查目录和文件的权限:chmod -R 755 ./assets # 给assets目录及子文件设置可读权限 - 也可以尝试用绝对路径直接访问文件,验证是否能读取:
img = ft.Image( src="/Users/yourname/path/to/project/assets/icon.png", # 替换为你的实际绝对路径 width=100, height=100, fit=ft.ImageFit.CONTAIN, )
如果绝对路径能正常显示图片,说明是相对路径或Flet的assets配置问题。
4. 排查系统完整性保护(SIP)影响
如果以上方法都无效,可能是MacOS的SIP限制了文件访问。可以临时关闭SIP测试(注意:关闭SIP会降低系统安全性,测试后建议重新开启):
- 重启Mac,按住
Command + R进入恢复模式 - 打开「实用工具」→「终端」,执行
csrutil disable - 重启Mac后再次运行脚本
- 测试完成后,重复步骤1-2,执行
csrutil enable重新开启SIP
内容的提问来源于stack exchange,提问作者Alessandra
相关产品推荐
相关产品推荐

