为何macOS信任未签名Python C扩展的wheel包却拦截tar包?
macOS下Chrome下载的Python C扩展tar包导入失败的解决办法
问题情况
我同时提供tar包和wheel包格式的Python C扩展,在macOS上安装wheel包完全没问题,但把PYTHONPATH指向Chrome下载的tar包内的扩展时,直接弹出“未验证开发者”提示框,关掉后就出现导入错误:
>>> import devsim Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/jsanchez/Downloads/devsim_macos_v2.3.7rc1/lib/devsim/__init__.py", line 8, in <module> from .devsim_py3 import * ImportError: dlopen(/Users/jsanchez/Downloads/devsim_macos_v2.3.7rc1/lib/devsim/devsim_py3.so, 0x0002): tried: '/Users/jsanchez/Downloads/devsim_macos_v2.3.7rc1/lib/devsim/devsim_py3.so' (code signature in <ED44BB00-36CF-39A8-8999-8309CBA016E4> '/Users/jsanchez/Downloads/devsim_macos_v2.3.7rc1/lib/devsim/devsim_py3.so' not valid for use in process: library load disallowed by system policy)
后来发现用curl下载的tar包就正常,应该是Chrome给文件加了特殊属性导致的。
解决步骤
1. 移除隔离属性
Chrome下载的文件会被macOS打上com.apple.quarantine(来自互联网)的标记,这会触发系统安全限制。直接用xattr命令删掉这个属性就行:
- 针对整个解压后的目录批量处理:
xattr -r -d com.apple.quarantine /Users/jsanchez/Downloads/devsim_macos_v2.3.7rc1
- 或者只处理出问题的
.so文件:
xattr -d com.apple.quarantine /Users/jsanchez/Downloads/devsim_macos_v2.3.7rc1/lib/devsim/devsim_py3.so
2. 测试效果
执行完命令后,重新打开终端(确保环境变量刷新),再试导入:
import devsim
一般这时候就能正常导入了。
3. 避免后续踩坑
- 直接用
curl下载tar包,不会触发隔离标记 - 如果还是想用Chrome下载,解压前先给tar包本身去掉属性:
xattr -d com.apple.quarantine /Users/jsanchez/Downloads/devsim_macos_v2.3.7rc1.tar.gz
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

