Windows 10下VSCode Bash终端执行bootstrap.sh激活Pipenv环境时出现“No such directory”错误求助
问题原因与解决方案
这个问题我之前在Windows的Git Bash环境里也碰到过,本质是Windows路径格式和Bash类shell的路径规则不兼容导致的,咱们一步步拆解:
错误根源
你遇到的报错核心是路径解析混乱:
- 在Bash(或
sh)脚本中,双反斜杠\\会被解析成单个反斜杠\,但Bash类shell只认**正斜杠/**作为路径分隔符,Windows的反斜杠在这里会被当作转义字符处理,导致路径拼接后变成了混乱的格式(比如你看到的/Scripts/activate: No such file or directoryask-project-2vwc8e6G,就是路径被错误截断了)。 pipenv --venv在Windows环境下返回的是Windows格式的路径(比如C:\Users\johng\.virtualenvs\cashman-flask-project-2vwc8e6G),这种带盘符和反斜杠的路径在Bash中无法直接被正确识别。
解决办法
方案1:转换路径分隔符(直接修复原有代码)
把脚本中的激活行改成下面这样,用tr命令把Windows路径里的反斜杠替换成Bash能识别的正斜杠:
source "$(pipenv --venv | tr '\\' '/')/Scripts/activate"
原理:tr '\\' '/'会把pipenv --venv输出的所有反斜杠替换成正斜杠,生成Bash可以正确解析的路径,比如C:/Users/johng/.virtualenvs/cashman-flask-project-2vwc8e6G/Scripts/activate。
方案2:用pipenv自带的命令(更推荐,避免路径问题)
其实不需要手动去source激活脚本,pipenv提供了更省心的方式:
- 如果只是要启动Flask服务器,直接用
pipenv run命令在虚拟环境中执行:pipenv run flask run - 如果一定要在脚本中激活环境,可以用
pipenv --shebang生成适配当前shell的激活代码:eval "$(pipenv --shebang)"
这个命令会自动处理路径格式问题,不管是Windows还是类Unix环境都能正常工作。
方案3:切换到bash执行脚本
有时候#!/bin/sh在Windows的Bash环境下会有兼容性问题,把脚本开头改成:
#!/bin/bash
然后用bash bootstrap.sh执行脚本(而不是source bootstrap.sh,当然source也可以,但直接用bash执行更稳定)。
内容的提问来源于stack exchange,提问作者John G.
相关产品推荐
相关产品推荐

