Cygwin中正确的路径用法:“python c:\ somefile.py”与“python/cygdrive/c/somefile.py”之间的区别`

2024-07-01 07:33:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Windows+Cygwin上使用Django 1.5&Python 2.7。下面的命令给出了bash shell中的一个错误

$ python /cygdrive/c/Python27/Lib/site-packages/django/bin/django-admin.py

错误:

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

但这是有效的

$ python c:/Python27/Lib/site-packages/django/bin/django-admin.py

我在django-admin.py错误上看到过很多类似的问题,但没有一个是关于这个问题的。

那么Cygwin上bash shell中的python c:\somefile.py&;python /cygdrive/c/somefile.py之间的区别是什么


Tags: djangopybashbinadminlibpackages错误
3条回答

正如其他人所指出的,这里的部分问题是您正在从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应该用运行该命令的结果替换文本,因此如果这是作为从Cygwin bashshell调用的Windows Python的参数给定的,Windows Python将收到它可以使用的Windows路径。

  • path/to/script.py-这是一个相对路径,因此需要从适当的目录调用它。它是第一个同时适用于Cygwin和Windows Python的版本,并从Cygwin shell和Windows命令行调用。

如您所见,路径是复杂的,特别是当您同时使用Cygwin和Windows工具时。

一般来说,如果可能的话,最安全的做法是坚持使用其中一个(因此,只能从Cygwin shell使用Cygwin Python,并且只能从Windows命令行使用Windows Python)。如果这不可能,那么下一个最好的方法是在从Cygwin调用Windows程序时使用cygpath,或者使用其他方法-运行cygpath -w /cygdrive/c/Windows将得到c:\windows;运行cygpath 'c:\Windows'将打印/cygdrive/c/Windows

您似乎将Python安装在C:中,而不是/usr/bin/Python或类似的文件中。我猜您是从Python.org安装了Python的Windows端口,而不是Cygwin Python包。在本例中,python可执行文件没有使用Cygwin(它运行的是本机的),它需要Windows格式的路径名。

此外,Django似乎已安装在Windows Python安装中。Cygwin可能完全不在这个圈子里。

好吧,没什么不一样的:

hgs15624@ESCLT0116 ~
$ python /cygdrive/c/test.py
Hello

hgs15624@ESCLT0116 ~
$ python c:/test.py 
Hello

我想你是在寻找奇怪的权限。

编辑:下面只是指问题中的一个错别字。

错误显示:

/cygdrive/c/Python27/Lib/sitepackages/django/bin/django-admin.py

你错过了site-packages中的连字符了吗?

相关问题 更多 >

    热门问题