0

次のエラーは、Windows システムを使用している同僚と SVN 経由でコードを共有しているという事実に関連していると確信しています。

私自身、Mac で Python を使用し、TextMate で編集しています。

#!/usr/bin/python

import os

from google.appengine.api import users
from google.appengine.ext import webapp
...

そのコードを実行すると、構文エラーが発生します。

events.py:2 invalid syntax

SVN を使用する場合、行末の問題はありますか?

すべてのヒントに感謝します。


編集

問題は SVN が原因ではないようです。

興味深いことに、シェルで直接実行すると、構文エラーは発生しません。しかし、Textmate で (PyCheckMate を使用して) 検証することも、GoogleAppEngineLauncher で起動しようとしても、エラーが返されます。

4

4 に答える 4

4

Pythonは行末を気にしないはずですが、Macは最初の行でCRLF行が終わるのを好まないので、これが問題になる可能性があります。

0000000 # ! / u s r / b i n / p y t h o n \r \n
                                          ^^

svn:eol-styleプロパティをに設定することで、SVNに行末を変換するように指示できますnative。次に、ファイルがWindowsでチェックアウトされるときにLFエンディングがCRLFに変換され、Macでチェックアウトされるときに同僚のCRLFエンディングがLFに変換されます。

于 2009-10-24T22:23:49.863 に答える
1

バイトオーダーマーク?いいえ、ネイティブの EOL が必要です。

Python がレコード ターミネータ スタイルの通常のバリエーションを黙って無視しなかったとしたら、私は驚くでしょう。

シェルやカーネルはそうではないかもしれませんが、python: bad interpreter.

ファイルの先頭にBOM またはバイト オーダー マークがある可能性があります。で確認してくださいod -c events.py

UTF-8 では BOM は不要であり、推奨されませんが、何らかの理由で Wi​​ndows のメモ帳には、ファイルの最初の文字として BOM を挿入するという厄介な習慣があります。

python events.pyそのため、コメントでそれがうまく機能したことを指摘し\r、カーネルのスクリプト実行を混乱させていたことを明らかにしました。(#! interp [arg]実際にはカーネルによって処理されます。それが失敗した場合、シェルはそれを試行し、エラーが表示されます。) 解決策は、svn マニュアルのプロパティにありますsvn:eol-style

于 2009-10-24T21:53:28.337 に答える
1

行末が (通常) Windows とその他のコンピューティングの世界とで異なるのは事実ですが、Python はこの問題にとらわれないように設計されています。通常、Python はさまざまな行末に問題はありません。

さまざまな行末を使用して Mac で Python スクリプトを実行してみましたが、問題はありませんでした。次のコマンドを使用してスクリプトを実行していたことに注意してください。

python test.py

それ以外の

./test.py

問題が本当に Python にあるのか、それともシェル/カーネルに関連しているのかを確認するために、両方の形式を試してみる価値があるかもしれません。一部の環境では、シバン行の CRLF エンディングに問題があることを知っています。

于 2009-10-24T21:54:15.763 に答える
1

Subversion はすべての行末 (EOL) スタイルを無視します。あなたがそう言わない限り、あなたのファイルに触れることは決してありません。

Subversion に別の EOL スタイルを使用するように指示するにはどうすればよいですか? 問題のファイルにプロパティsvn:eol-styleを設定することにより:

svn propset svn:eol-style LF /path/to/my/file/in/workingcopy

以下を使用して、ファイルにこれらのプロパティが設定されているかどうかを確認できます。

svn proplist /path/to/my/file/in/workingcopy
于 2009-10-24T21:54:32.940 に答える