安装markdownlint-cli环境失败:AttributeError: 'bytes'对象无'tell'属性
问题
我使用如下pre-commit配置:
- repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.32.2 hooks: - id: markdownlint
pre-commit有时会执行失败,抛出以下错误:
[INFO] Installing environment for https://github.com/igorshubovych/markdownlint-cli. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... An unexpected error has occurred: CalledProcessError: command: ('/usr/local/bin/python', '-mnodeenv', '--prebuilt', '--clean-src', '/root/.cache/pre-commit/repoki3l4r17/node_env-default') return code: 1 stdout: (none) stderr: * Install prebuilt node (19.8.1) .Incomplete read while readingfrom https://nodejs.org/download/release/v19.8.1/node-v19.8.1-linux-x64.tar.gz . Traceback (most recent call last): File "/usr/local/lib/python3.10/runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/local/lib/python3.10/runpy.py", line 86, in _run_code exec(code, run_globals) File "/usr/local/lib/python3.10/site-packages/nodeenv.py", line 1519, in <module> main() File "/usr/local/lib/python3.10/site-packages/nodeenv.py", line 1104, in main create_environment(env_dir, args) File "/usr/local/lib/python3.10/site-packages/nodeenv.py", line 980, in create_environment install_node(env_dir, src_dir, args) File "/usr/local/lib/python3.10/site-packages/nodeenv.py", line 739, in install_node install_node_wrapped(env_dir, src_dir, args) File "/usr/local/lib/python3.10/site-packages/nodeenv.py", line 762, in install_node_wrapped download_node_src(node_url, src_dir, args) File "/usr/local/lib/python3.10/site-packages/nodeenv.py", line 602, in download_node_src with ctx as archive: File "/usr/local/lib/python3.10/contextlib.py", line 135, in __enter__ return next(self.gen) File "/usr/local/lib/python3.10/site-packages/nodeenv.py", line 573, in tarfile_open tf = tarfile.open(*args, **kwargs) File "/usr/local/lib/python3.10/tarfile.py", line 1630, in open saved_pos = fileobj.tell() AttributeError: 'bytes' object has no attribute 'tell'
当前使用nodeenv-1.7.0版本,该错误随机出现,约每三次执行触发一次,请问是否有其他用户遇到此问题?
回答
有不少用户遇到过这个问题,核心原因是nodeenv 1.7.0在下载Node预编译包时,网络波动导致文件下载不完整,进而触发这个读取异常。
可行解决办法:
- 清理pre-commit缓存:删除缓存目录后重新执行,让工具重新下载完整的Node包:
rm -rf ~/.cache/pre-commit/ - 升级nodeenv版本:更新到1.8.0及以上版本,后续版本修复了下载逻辑的异常处理,能降低这类问题的触发概率:
pip install --upgrade nodeenv - 切换Node镜像源:用国内镜像加速下载,避免因官方源网络不稳定导致的文件不完整:
export NODEENV_NODE_MIRROR=https://npmmirror.com/mirrors/node/
内容的提问来源于stack exchange,提问作者Casper Lindberg
相关产品推荐
相关产品推荐

