1

У меня проблемы с тем, чтобы Анаконда запускала скрипты Python на Cygwin.

Моя конфигурация 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, но не знаю, как ее исправить ...

У меня нет этой проблемы при использовании Python-версии Cygwin.

1 ответ1

2

Cygwin выполняет сопоставление между путями Windows и путями, которые видят программы Cygwin. Например, каталог Cygwin HOME /home /John является каталогом Windows C:\cygwin\home\John. Поместив корень файловой системы Cygwin в каталог Windows C:\cygwin, избегайте конфликтов между именами корневых каталогов Cygwin и именами корневых каталогов Windows.

Cygwin также отображает корневые каталоги дисков Windows в каталоги в /cygdrive, так что каталоги Windows C:\ и D:\ эквивалентны каталогам Cygwin /cygdrive /c и /cygdrive /d.

Программы Windows не понимают абсолютные пути Cygwin, а программы Cygwin (как правило) не понимают абсолютные пути Windows. Вы можете выполнить конвертацию между двумя формами с помощью команды cygpath . cygpath --help дает довольно полное описание своих возможностей.

Ваша программа на Python для Windows понимает только пути 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .