python - 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
我收到相同的命令未找到错误。我错过了什么?
解决方案
根据我们的评论交流,问题是pipenv
可执行文件所在的目录 - 在以非交互方式调用命令时/home/<username>/.local/bin/
不存在于环境变量中。PATH
这表明它是一个扩展的初始化文件PATH
,并且似乎~/.bash_profile
在您的情况下;要强制显式bash
调用以获取此文件,必须传递-l
( ) 选项。--login
您报告以下命令最终为您工作:
bash -l -c "cd ~ && pipenv run python ~/test.py"
笔记:
显式调用 with
-c
是wsl.exe
当您向其传递要执行的命令时在幕后执行的操作,尽管没有-l
(例如wsl date
变成bash -c date
)。- 的使用
-c
使 shell non - interactive,这意味着它~/.bashrc
也不是来源;如果你想要后者,请添加-i
- 的使用
如果没有命令(仅执行
wsl.exe
or ),则会进入bash.exe
一个交互式shell,它实际上会使用,因此会自动获取源(/使用另一种机制来请求登录 shell:参数数组的第一个条目(您可以检查 with ) 设置为,并且初始值告诉 Bash 启动登录 shell)。bash
-l
~/.bash_profile
wsl.exe
bash.exe
echo $0
-bash
-
另请参阅:谢谢, Zymotik。
推荐阅读
- r - 将 keras 模型映射到小标题列表上
- java - JavaFX 应用程序类不在 javafx.application 包中
- spring - 如何对子属性中包含的 ID 进行复杂的 @PreAuthorize 检查?
- rust - 具有可变引用的递归结构中的生命周期
- templates - 在生产站点中为 getTemplate lsit 调用 Docusign API 失败?
- rundeck - 有没有办法使用非登录用户来运行 Rundeck 作业?
- php - WampServer, mysqli_connect (HY000/1045) 拒绝用户访问
- javascript - 无法读取 null 的属性“角色”
- javascript - 从 HTML 输入中获取日期以在 JS 中使用
- mysql - 优化二级索引和日期范围查询