You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:47