首页 > 解决方案 > WSL——未找到命令

问题描述

我在 PowerShell 中运行以下命令wsl pipenv run python ~/test.py并收到以下错误/bin/bash: pipenv: command not found。如果我启动 WSL/Ubuntu,我可以运行pipenv run python ~/test.py并获得成功的输出。在 PowerShell 和 Git Bash 中,我可以运行pipenv -h并获得正确的输出。WSL 在哪里寻找这个命令?

在相关说明中,当我启动 WSL/Ubuntu 并获得成功输出时,我可以python ~/test.py运行python3 ./test.py。但从 PowerShell 只能wsl python3 ~/test.py工作。当我运行时,wsl python ~/test.py我收到相同的命令未找到错误。我错过了什么?

标签: pythonpython-3.xpowershellubuntuwindows-subsystem-for-linux

解决方案


根据我们的评论交流,问题是pipenv可执行文件所在的目录 - 在以非交互方式调用命令时/home/<username>/.local/bin/不存在于环境变量中。PATH

这表明它是一个扩展的初始化文件PATH,并且似乎~/.bash_profile在您的情况下;要强制显式bash调用以获取此文件,必须传递-l( ) 选项。--login

您报告以下命令最终为您工作:

bash -l -c "cd ~ && pipenv run python ~/test.py"

笔记:

  • 显式调用 with-cwsl.exe当您向其传递要执行的命令时在幕后执行的操作,尽管没有-l(例如wsl date变成bash -c date)。

    • 的使用-c使 shell non - interactive,这意味着它~/.bashrc也不是来源;如果你想要后者,请添加-i
  • 如果没有命令(仅执行wsl.exeor ),则会进入bash.exe一个交互式shell,它实际上使用,因此会自动获取源(/使用另一种机制来请求登录 shell:参数数组的第一个条目(您可以检查 with ) 设置为,并且初始值告诉 Bash 启动登录 shell)。bash-l~/.bash_profilewsl.exebash.exeecho $0-bash-

另请参阅:谢谢, Zymotik


推荐阅读