树莓派Zero W执行pipenv install时pexpect超时问题求助
我之前在树莓派Zero W上折腾pipenv时也碰到过类似的pexpect超时问题,结合你的情况——内存没耗尽、手动执行子进程命令正常——给你几个实用的调试和解决思路:
1. 延长Pipenv的超时时间
树莓派Zero W的ARMv6l CPU性能有限,哪怕内存充足,创建虚拟环境的过程也会比常规x86机器慢很多,而Pipenv默认的pexpect超时时间可能不够用。你可以通过环境变量手动延长超时:
export PIPENV_TIMEOUT=120 # 设置为120秒,可根据实际情况调整 pipenv install requests
这个环境变量会控制Pipenv等待子进程完成的最长时间,给慢节奏的Zero多留些时间应该能解决超时问题。
2. 手动创建虚拟环境后关联Pipenv
既然你手动执行/usr/bin/python3.5 -m pipenv.pew new foo-su43ObVR -d -p /usr/bin/python3.5能正常完成,那可以绕开Pipenv的自动创建流程,先手动搞定虚拟环境,再让Pipenv关联它:
- 先手动创建虚拟环境(用venv或者pew都可以):
# 用venv创建的例子 python3 -m venv ~/.local/share/virtualenvs/testdir-$(uuidgen | cut -c1-8) # 或者用pew创建 pew new test_env -p /usr/bin/python3.5 - 进入你的项目目录,让Pipenv关联这个已有的虚拟环境:
# 替换成你刚创建的虚拟环境的python路径 pipenv --python ~/.local/share/virtualenvs/testdir-xxxx/bin/python - 之后再执行
pipenv install requests就不会触发自动创建流程了。
3. 升级Pipenv及相关依赖
你的Python版本是3.5,对应的Pipenv版本可能比较老旧,旧版本在ARMv6l架构上可能存在兼容性问题。先升级pip和pipenv:
pip3 install --upgrade pip pip3 install --upgrade pipenv
升级后再尝试创建项目,很多旧版本的bug会被修复。
4. 开启调试模式查看详细日志
如果上面的方法都没解决,可以开启调试模式,查看pexpect和Pipenv的详细执行日志,定位到底卡在哪个环节:
# 开启Pipenv详细日志 PIPENV_VERBOSE=1 pipenv install requests # 或者开启Pexpect的调试输出 PEXPECT_DEBUG=1 pipenv install requests
通过日志你能看到子进程的实时输出,判断是不是有隐藏的交互请求、或者某个步骤的执行时间远超预期。
5. 检查子进程的环境变量差异
有时候Pipenv调用子进程时的环境变量和你手动执行时不一样(比如PATH、PYTHONPATH等),导致执行效率变慢或者出现异常。你可以在pdb调试时打印子进程的环境变量,或者手动模拟Pipenv的环境来执行那个pew命令,验证是否会出现超时:
# 先查看Pipenv运行时的环境变量,然后用env模拟 env -i PATH=/usr/bin:/bin PYTHONPATH=/home/pi/.local/lib/python3.5/site-packages /usr/bin/python3.5 -m pipenv.pew new foo-su43ObVR -d -p /usr/bin/python3.5
如果模拟后出现超时,说明是环境变量的问题,调整后再让Pipenv使用正确的环境即可。
内容的提问来源于stack exchange,提问作者fearless_fool

