运行 Python 脚本放在 PATH (cygwin)

running Python script placed in PATH (cygwin)

我想将我的 Python 脚本放入 PATH 中列出的目录中,只需在 Windows.

上的 cygwin 中的任何位置键入脚本名称即可调用该脚本

我正在使用 shebang

#!/usr/bin/env python

在 Linux 机器上运行完美。

然而,通过从 windows cygwin 调用以下行,我得到一个错误:

$ my_script.py some arguments
C:\app\Python36\python.exe: can't open file '/cygdrive/d/11_scripts/my_script.py': [Errno 2] No such file or directory

问题是因为cygwin扩展了脚本路径,python不理解cygwin挂载驱动器的方式:/cygwin/d/... 当我 运行 具有完整路径(win 格式)或相对路径的脚本时,它可以工作。

$ d:/11_scripts/my_script.py some arguments

您知道任何解决方法吗?这里讨论了类似的问题: Problems running Python script via Cygwin 但是我想使用路径。

谢谢!

补充: 目前我使用一种 bash 包装脚本,它被放入 PATH:

#!/usr/bin/bash
pypath='/cygdrive/c/app/Python36/python'

$pypath -u 'd:_scripts\my_script.py' $@

你运行宁

C:\app\Python36\python.exe

这是一些本地 Windows Python,并且 不是 来自 Cygwin 的 Python,编译为使用 Cygwin。所以它自然不会知道 Cygwin 路径。

如果您想使用 Cygwin 中的 Python,最好的选择是只使用 Cygwin 附带的 Python。

如果您绝对必须使用来自 Cygwin 的本机 Windows Python(您可以这样做,我偶尔也有理由这样做,例如作为测试代码 运行 on Python for Windows 例如使用 msvcrt 模块)你可以这样做。但是您仍然需要将任何文件系统路径转换为本机 Windows 路径。在 Cygwin 中,您可以使用 cygpath 命令来完成此操作,例如

$ cygpath -w -a /cygdrive/d/whatever
D:\whatever

包装传递给 Python 的任何文件路径,如

$ C:/Python36/python.exe "$(cygpath -w -a /cygdrive/d/whatever)"

如果您需要经常这样做,您可以制作一个包装脚本。