Como consertar o Windows 8 Anaconda “não é possível abrir o arquivo” erros no cygwin ao usar caminhos absolutos?

1

Estou tendo problemas para fazer com que o Anaconda execute scripts python no cygwin.

Minha configuração. 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

o lançamento de python ou ipython sem script funciona bem:

$ 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

Aqui está o problema:

$ 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!

Isso acontece com qualquer script que eu tente executar com caminhos absolutos. Eu suspeito que o problema é causado por algum tipo de problema cygpath, mas não sei como consertá-lo ...

Eu não tenho esse problema ao usar a versão do python do Cygwin.

    
por John Prior 26.04.2014 / 01:27

1 resposta

2

O Cygwin realiza um mapeamento entre os caminhos do Windows e os caminhos que os programas do Cygwin veem. Por exemplo, seu diretório Cygwin HOME / home / John é o diretório do Windows C: \ cygwin \ home \ John. Colocar a raiz do sistema de arquivos Cygwin no diretório C: \ cygwin do Windows evita colisões entre nomes de diretórios raiz do Cygwin e nomes de diretórios raiz do Windows.

O Cygwin também mapeia os diretórios raiz das unidades do Windows para os diretórios sob / cygdrive, para que os diretórios Windows C: \ e D: \ sejam equivalentes aos diretórios / cygdrive / c e / cygdrive / d do Cygwin.

Os programas do Windows não entendem os caminhos absolutos do Cygwin e os programas do Cygwin (geralmente) não entendem os caminhos absolutos do Windows. Você pode converter entre os dois formulários usando o comando cygpath . cygpath --help fornece uma descrição bastante completa de seus recursos.

Seu programa python do Windows entende apenas os caminhos do Windows, portanto, para executar python /home/John/FooDir/helloworld.py , use cygpath da seguinte forma:

python $(cygpath -w /home/John/FooDir/helloworld.py)

Ou, sabendo o que você sabe sobre o mapeamento entre os caminhos do Cygwin e os caminhos do Windows, basta executar o script do Python da seguinte forma:

python "C:\cygwin\home\John\FooDir\helloworld.py"
    
por 26.04.2014 / 02:27

Tags