首页 > 解决方案 > 运行放置在 PATH (cygwin) 中的 Python 脚本

问题描述

我想将我的 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 But I want to use the PATH.

谢谢!

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

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

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

标签: python-3.xcygwinshebang

解决方案


你在跑步

C:\app\Python36\python.exe

这是一些本地 Windows Python,而不是来自 Cygwin 的 Python,编译为使用 Cygwin。所以很自然地,它对 Cygwin 路径一无所知。

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

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

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

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

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

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


推荐阅读