执行poetry run worker.py报FileNotFoundError找不到文件问题咨询
执行命令
poetry run worker.py抛出FileNotFoundError:[Errno 2] No such file or directory: b'/snap/bin/worker.py',已确认当前工作目录存在worker.py文件
1. 报错产生原因
poetry run的默认执行逻辑限制:直接传入文件名作为参数时,poetry会优先从环境变量PATH包含的路径搜索可执行文件,不会主动加载当前工作目录的同名文件,该设计是为了避免误执行当前目录下的恶意文件。本次报错中snap安装的poetry默认优先搜索/snap/bin/路径,因此抛出找不到该路径下worker.py的错误。- snap沙箱机制限制:如果你是通过snap包管理器安装的poetry,snap自带的沙箱隔离规则会限制poetry的文件访问范围,就算指定当前目录路径,也可能因工作目录不在snap允许的访问列表内触发同类报错。
2. 解决方法
以下方案按通用优先级排序:
- 方案1(最通用,无需修改配置):调整命令格式,指定用虚拟环境的python解释器执行当前目录的脚本,执行命令改为:
该写法会明确告诉poetry调用虚拟环境内的python解释器,直接加载当前目录下的worker.py文件,跳过PATH路径搜索逻辑,所有安装方式的poetry都兼容该写法。poetry run python ./worker.py - 方案2(适合频繁执行的脚本):在项目的
pyproject.toml中配置脚本执行入口,添加以下配置项:
其中[tool.poetry.scripts] worker = "worker:main"worker:main对应worker.py文件中的入口函数main,配置保存后直接执行poetry run worker即可启动脚本。 - 方案3(解决snap版本的沙箱限制):如果确认是snap安装的poetry导致的访问限制,可以卸载snap版本后用官方推荐的pipx方式重装:
- 执行
sudo snap remove poetry卸载snap版poetry - 执行
pipx install poetry完成官方版本安装
重装后即可正常访问当前工作目录的所有项目文件。
- 执行
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

