9

Windows + CygwinでDjango 1.5とPython 2.7を使用しています。次のコマンドを実行すると、bash シェルでエラーが発生します

$ 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 シェルでのpython c:\somefile.py&の違いは何ですか?python /cygdrive/c/somefile.py

4

3 に答える 3

20

他の人が指摘しているように、ここでの問題の一部は、Cygwin から Windows Python を呼び出していることです。このような奇妙な動作に遭遇するため、これを行うのは奇妙なことですが、注意して作業することができます。

Cygwin から Python を呼び出すと (これは Cygwin Python と Windows Python の両方に当てはまります)、渡すパスはそのまま Python に渡されて処理されます。つまり、Python はそのようなパスの処理方法を知っている必要があります。たとえば、次を渡すとします。

  • C:\path\to\script.py- Windows Python はこれを処理する方法を知っていますが、Cygwin Python は混乱する可能性があります。とはいえ、これを Cygwin シェルに入力すると、これらのバックスラッシュはエスケープ文字として解釈される傾向があり、エスケープ文字であるかどうかは、いくつかの比較的複雑な規則に依存します。Cygwin で遊んでいる場合は避けてください。

  • 'C:\path\to\script.py'- これらの引用符は、Cygwin の bash シェルによって取り除かれますが、バックスラッシュがエスケープ文字として使用されるのを停止するため、Cygwin から Windows Python を呼び出す場合は問題なく機能します。ただし、Windows は単一引用符を処理しないため、Windows コマンド ラインなどから実行すると問題が発生します。

  • /cygdrive/c/path/to/script.py- これは、Cygwin Python などの Cygwin プログラムから見たパスです。Cygwin Python では完全に機能しますが、Windows Python ではまったく機能しません。

  • C:/path/to/script.py- あまり知られていませんが、Windows パスのバックスラッシュはスラッシュに置き換えることができます。行儀の良い Windows プログラムであれば、それを問題なく処理する必要があります。Windows では明示的に許可されています。特に、Windows Python ではまったく問題がなく、Cygwin の bash シェルはスラッシュを賢く使おうとはしません。したがって、この種のパスは、Windows Python を呼び出す場所ならどこでも使用できます。

  • $(cygpath -w /cygdrive/c/path/to/script.py)-cygpath異なるパス スタイル間で変換するための Cygwin ユーティリティです。オプションで呼び出すと-w、Cygwin パスを Windows パスに変換します。は$(...)、Cygwin の bash シェルがテキストをコマンドの実行結果に置き換える必要があることを示していたので、これが Cygwin bash シェルから呼び出された Windows Python への引数として与えられた場合、Windows Python は使用できる Windows パスを受け取ります。

  • path/to/script.py- これは相対パスなので、適切なディレクトリから呼び出す必要があります。これは、Cygwin と Windows Python の両方で機能し、Cygwin シェルと Windows コマンド ラインの両方から呼び出される最初のバージョンです。

ご覧のとおり、特に Cygwin と Windows ツールを一緒に使用している場合、パスは複雑です。

原則として、最も安全なのは、可能であればどちらか一方を使用することです (そのため、Cygwin シェルからは Cygwin Python のみを使用し、Windows コマンド ラインからは Windows Python のみを使用してください)。それが不可能な場合、次善の策はcygpath、Cygwin から Windows プログラムを呼び出すときはいつでも使用するcygpath -w /cygdrive/c/Windowsことですc:\windows。実行cygpath 'c:\Windows'すると印刷されます/cygdrive/c/Windows

于 2013-03-11T23:36:06.390 に答える
3

/usr/bin/python などではなく、C: に Python がインストールされているようです。Cygwin python パッケージではなく、python.org から Python の Windows ポートをインストールしたと思います。この場合、python 実行可能ファイルは Cygwin を使用しておらず (ネイティブで実行されています)、Windows 形式のパス名を想定しています。

さらに、Django は Windows Python インストールにインストールされているようです。Cygwin はおそらく完全にループから外れています。

于 2013-03-11T13:28:17.287 に答える
1

まあ、何も変わらないはずです:

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か?

于 2013-03-11T09:59:49.823 に答える