macOS10.12+Anaconda环境安装GalSim运行scons tests遇TypeError
TypeError: write() argument must be str, not bytes when running
scons tests for GalSim 问题分析
你碰到的这个错误是典型的Python 2与Python 3的IO兼容性问题:在Python 3中,sys.stdout默认以文本模式工作,它的write()方法只接受字符串(str类型);但测试脚本里的buf是字节流(bytes类型),直接写入就会触发类型错误,这也是回溯指向tests/SConscript第81行sys.stdout.write(buf)的核心原因。
解决方案
这里有几种针对性的解决方式,按推荐程度排序:
1. 修改测试脚本的兼容代码
直接调整GalSim测试脚本中写入标准输出的逻辑,把字节流转成字符串:
- 打开路径
/Users/lorena/git/GalSim/tests/SConscript - 找到第81行的
sys.stdout.write(buf),替换成:
如果后续出现编码解码错误,可以尝试用sys.stdout.write(buf.decode('utf-8'))latin-1编码(兼容更多字节场景):sys.stdout.write(buf.decode('latin-1')) - 保存修改后,重新运行
scons tests即可。
2. 指定Python 2环境运行测试
如果你的Anaconda环境里有Python 2.7(GalSim早期版本对Python 2支持更完善),可以直接指定Python解释器运行scons:
scons tests PYTHON=python2
注意:确保Python 2环境已经安装了GalSim的所有依赖包。
3. 升级到GalSim的Python 3兼容版本
检查GalSim的代码仓库,是否有已经修复Python 3 IO问题的更新分支或版本。可以尝试拉取最新的master分支重新构建:
cd /Users/lorena/git/GalSim git pull origin master scons clean scons scons tests
验证
修改完成后,重新执行scons tests,如果不再出现TypeError,说明问题已经解决。
内容的提问来源于stack exchange,提问作者Lorena Mezini
相关产品推荐
相关产品推荐

