执行iex -S mix时出现模块已编译导致的Module.put_attribute/3调用错误
解决Elixir项目执行
iex -S mix时报错:Module.put_attribute/3调用失败,模块已编译 问题原因
这个错误通常源于项目残留的已编译模块缓存,导致Mix尝试重新加载模块时出现冲突;另外在M2芯片Mac上通过Rosetta转译终端运行,也可能因架构兼容性引发编译状态异常。
解决步骤
1. 清理编译缓存(最常用解决方法)
执行以下命令彻底清理缓存并重新初始化项目:
# 删除编译产物、依赖及语言服务器缓存目录 rm -rf _build deps .elixir_ls # 重新拉取依赖 mix deps.get # 再次启动交互式Elixir环境 iex -S mix
2. 切换至原生ARM64终端
你的Mac为M2架构(ARM),当前使用的Rosetta转译终端可能存在适配问题:
- 打开Launchpad找到终端,右键选择「显示简介」
- 取消勾选「使用Rosetta打开」
- 关闭现有终端,重新打开原生终端后进入项目目录,再次执行
iex -S mix
3. 验证Erlang/Elixir架构匹配
确认安装的Erlang和Elixir为ARM64版本:
elixir --version
输出中需包含aarch64-apple-darwin标识,如果显示x86_64,说明安装的是x86版本,需通过原生终端使用Homebrew重新安装适配ARM的版本。
内容的提问来源于stack exchange,提问作者Bhanwarlal Chaudhary
相关产品推荐
相关产品推荐

