直接调用与 Python 子进程时 GOPATH 的解释不同

GOPATH interpreted differently when calling directly versus Python subprocess

我最近找到了 Python getpass 在 Windows 上不起作用的修复程序:Python not working in the command line of git bash

或者至少那是我记得更改 python 配置的最后一件事。 (这是针对 Windows 10 上的 Python 3.6.1)

现在我也将 Python 用于其他任务,这些任务只需调用子进程以在终端上键入多个命令:

go build ./folder/
mv ./src/ ./bin/

我收到错误:go: GOPATH entry is relative; must be absolute: "/c/Users/OP/work"。但是,如果我自己输入 go build ./src/folder,我就无法理解。 我在环境变量中将 GOPATH 设置为 C:\work。我试过 ;.

有没有办法每次都反转别名python?或者将 python 的别名设置为 winpty 时到底发生了什么?

我在想,当我直接调用 go build 时,它是由我的用户配置文件或系统调用的。而当python的子进程调用它的时候,它调用的是相反的。因此,即使我在环境变量中只设置了 1 个,我也有两个 GOPATH 变量。

旁注:最近对 GOPATH 的另一个更改是从 C:/go 更改它,因为它不能与 GOROOT 相同。由于某种原因,该错误随机弹出。它在该设置下工作了一段时间,我不记得之前更改过任何内容,只是在许多其他已经使用的导入包之上添加了另一个导入包。

更新:使用 type python 我得到结果:python is aliased to 'winpty python.exe'。因此,我试图用 unalias python 撤销它。我得到的新结果是:python is hashed (/c/Users/OP/AppData/Local/Programs/Python/Python36/python)

这修复了 Python 子进程中的 go build 命令。但是,该别名修复了另一个 Python 使用 getpass 包的问题。

在 Windows 下,您 必须 使用 Windows 样式的 GOPATH,例如 d:\code 并且您可能应该使用 cmd shell没有别的。不幸的是,cygwin 路径(可能还有其他路径)不再有效,特别是对于 go get 接触 git.

坚持 Windows 路径和 Windows shell。

除了我的 unalias python 修复之外,我还发现了一些有趣的事情:当我将 GOPATH 的环境变量从 C:\work; 更改为 C:\go 时,所有 go 命令仍然会报错go: GOPATH entry is relative; must be absolute: ""。我在更新 Windows 10 Fall Creators 更新时遇到了同样的错误(但路径不同)。可能有关系。

只需关闭 MINGW 并重新打开它即可解决问题。所以也许它说的是我的环境变量的副本并将其用作参考而不是实际的系统属性。

我知道这不是一个热门问题,但有人可以从我的调查和调试时间中获益。