use*_*ser 9 python django bash cygwin
我在Windows + Cygwin上使用Django 1.5和Python 2.7.以下命令在bash shell中给出了一个错误
$ python /cygdrive/c/Python27/Lib/site-packages/django/bin/django-admin.py
Run Code Online (Sandbox Code Playgroud)
错误:
C:\Python27\python.exe: can't open file '/cygdrive/c/Python27/Lib/site-packages/django/bin/django-admin.py': [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)
然而这是有效的
$ python c:/Python27/Lib/site-packages/django/bin/django-admin.py
Run Code Online (Sandbox Code Playgroud)
我在django-admin.py错误中看到了很多类似的问题,但没有具体说明这一点.
那么在Cygwin的bash shell中python c:\somefile.py
&之间有什么区别呢python /cygdrive/c/somefile.py
me_*_*and 20
正如其他人所指出的,这里的部分问题是你从Cygwin调用Windows Python.这是一个奇怪的事情,因为你遇到这样的奇怪行为,但它可以小心使用.
当您从Cygwin调用Python时 - 这就是Cygwin Python和Windows Python的情况 - 您传递的路径将按原样提供给Python来处理.这意味着Python必须知道如何处理这种路径.例如,如果您传递以下内容:
C:\path\to\script.py
- Windows Python知道如何处理这个问题,而Cygwin Python可能会感到困惑.也就是说,如果你将它键入一个Cygwin shell,那些反斜杠很容易被解释为转义字符,它们是否取决于一些相对复杂的规则.如果你在Cygwin玩游戏,请避免使用.
'C:\path\to\script.py'
- 这些引号将被Cygwin的bash shell剥离,同时停止将反斜杠视为转义字符,因此从Cygwin调用Windows Python可以正常工作.但是,从Windows命令行或类似命令运行会导致问题,因为Windows不处理单引号.
/cygdrive/c/path/to/script.py
- 这是从任何Cygwin程序的角度来看的路径,例如Cygwin Python.它适用于Cygwin Python,但根本不适用于Windows Python.
C:/path/to/script.py
- 它并不是很有名,但Windows路径中的反斜杠可以用正斜杠代替,任何表现良好的Windows程序都应该处理得很好:它们是Windows明确允许的.特别是,Windows Python对它们没有任何问题,并且Cygwin的bash shell不会试图使用正斜杠聪明.因此,您可以在任何可以调用Windows Python的路径中使用此类路径.
$(cygpath -w /cygdrive/c/path/to/script.py)
- cygpath
是一个Cygwin实用程序,可在不同的路径样式之间进行转换; 使用-w
选项调用,它将Cygwin路径转换为Windows路径.该$(...)
指出,Cygwin的bash shell的应更换与运行命令的结果的文本,因此,如果这被给予作为参数的Windows Python从Cygwin的bash shell中调用的Windows的Python会得到它可以使用Windows路径.
path/to/script.py
- 这是一个相对路径,因此您需要从合适的目录中调用它.它是第一个适用于Cygwin和Windows Python的版本,并且从Cygwin shell和Windows命令行调用.
如您所见,路径很复杂,尤其是当您一起使用Cygwin和Windows工具时.
作为一般规则,最安全的是尽可能坚持使用其中一个(因此只能从Cygwin shell使用Cygwin Python,并且只能从Windows命令行使用Windows Python).如果那是不可能的,那么下一个最好的方法是cygpath
在你从Cygwin调用Windows程序时使用,或者相反 - 运行cygpath -w /cygdrive/c/Windows
会给出c:\windows
; 跑步cygpath 'c:\Windows'
将打印/cygdrive/c/Windows
.