我无法让 Anaconda 在 cygwin 上运行 python 脚本。
我的配置。Windows 8.1
$ echo $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/WINDOWS/Syste
m32/WindowsPowerShell/v1.0:/cygdrive/c/Anaconda:/cygdrive/c/Anaconda/Scripts
启动没有脚本的 python 或 ipython 可以正常工作:
$ which python
/cygdrive/c/Anaconda/python
$ python
Python 2.7.6 |Anaconda 1.9.2 (64-bit)| (default, Nov 11 2013, 10:49:15) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
$ ipython
Python 2.7.6 |Anaconda 1.9.2 (64-bit)| (default, Nov 11 2013, 10:49:15) [MSC v.1500 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 1.1.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]:
Do you really want to exit ([y]/n)? y
$ echo $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/WINDOWS/Syste
m32/WindowsPowerShell/v1.0:/cygdrive/c/Anaconda:/cygdrive/c/Anaconda/Scripts
问题如下:
$ pwd
/home/John
$ ls -l /cygdrive/c/cygwin64/home/John/FooDir/helloworld.py
-rwxrwx--x+ 1 John None 47 Apr 25 16:42 /cygdrive/c/cygwin64/home/John/FooDir/helloworld.py
$ cat /home/John/FooDir/helloworld.py
#!/usr/bin/env python
print("Hello, World!")
$ python FooDir/helloworld.py
Hello, World!
$ python /home/John/FooDir/helloworld.py
C:\Anaconda\python.exe: can't open file '/home/John/FooDir/helloworld.py': [Errno 2] No such file or directory
$ python /cygdrive/c/cygwin64/home/John/FooDir/helloworld.py
C:\Anaconda\python.exe: can't open file '/cygdrive/c/cygwin64/home/John/FooDir/helloworld.py': [Errno 2] No such file or directory
$ python C:\\Cygwin64\\home\\John\\FooDir\\helloworld.py
Hello, World!
在我尝试使用绝对路径运行的任何脚本中都会发生这种情况。我怀疑该问题是由某种 cygpath 问题引起的,但不知道如何解决它...
当我使用 Cygwin 版本的 python 时,我没有遇到这个问题。
答案1
Cygwin 在 Windows 路径和 Cygwin 程序看到的路径之间执行映射。例如,您的 Cygwin HOME 目录/home/John
是 Windows 目录C:\cygwin\home\John
。将 Cygwin 文件系统的根目录放在 WindowsC:\cygwin
目录中可避免 Cygwin 根目录名称与 Windows 根目录名称发生冲突。
Cygwin 还将 Windows 驱动器的根目录映射到 下的目录/cygdrive
,因此 Windows 目录C:\
和D:\
相当于 Cygwin 目录/cygdrive/c
和/cygdrive/d
。
Windows 程序无法理解 Cygwin 绝对路径,而 Cygwin 程序(通常)也无法理解 Windows 绝对路径。您可以使用命令在两种形式之间进行转换cygpath
。cygpath --help
对其功能进行了相当完整的描述。
您的 Windows Python 程序只能理解 Windows 路径,因此要执行它python /home/John/FooDir/helloworld.py
,请cygpath
按如下方式使用:
python $(cygpath -w /home/John/FooDir/helloworld.py)
或者,根据您现在了解的有关 Cygwin 路径和 Windows 路径之间的映射,您可以像这样运行 Python 脚本:
python "C:\cygwin\home\John\FooDir\helloworld.py"