Python + SVN + Windows / Mac = Неверный синтаксис? - PullRequest
0 голосов
/ 25 октября 2009

Я почти уверен, что следующая ошибка связана с тем, что я делюсь кодом через SVN с коллегой, использующим систему Windows.

Сам я использую Python на Mac, редактирую с помощью 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 голосов
/ 25 октября 2009

Хотя Python не должен заботиться об окончании строк, вашему Mac не понравится, когда строка CRLF заканчивается на первой строке, поэтому это может быть вашей проблемой.

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

SVN можно настроить перевод концов строк, задав для свойства svn:eol-style значение native. Затем он преобразует ваши окончания LF в CRLF, когда файл извлекается в Windows, и переводит окончания CRLF вашего коллеги в LF, когда вы проверяете на своем Mac.

1 голос
/ 25 октября 2009

Несмотря на то, что окончания строк (как правило) различаются в Windows и остальном компьютерном мире, Python спроектирован так, чтобы быть независимым от этой проблемы. Обычно у Python нет проблем с различными окончаниями строк.

Я попытался запустить скрипт Python на моем Mac с большим количеством концовок, и у меня не было проблем. Обратите внимание, что я запускал свой скрипт с помощью команды:

python test.py

вместо

./test.py

Возможно, стоит попробовать обе формы, чтобы увидеть, является ли ваша проблема действительно Python или она связана с вашей оболочкой / ядром. Я знаю, что в некоторых средах do возникают проблемы с окончаниями CRLF на линии Шебанга.

1 голос
/ 25 октября 2009

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
1 голос
/ 25 октября 2009

Метка порядка байтов? Нет, нужен родной EOL.

Я был бы удивлен, если бы Python просто не игнорировал обычные вариации стилей терминатора записи.

Оболочка или ядро ​​могут и не быть, но тогда вы увидите нечто вроде python: bad interpreter.

Возможно, что есть спецификация или метка порядка байтов в верхней части файла. Проверьте это с помощью od -c events.py.

Спецификация не нужна и не рекомендуется в UTF-8, но по какой-то причине в Windows Notepad раздражает привычка вставлять ее в качестве самого первого символа в файле.

Итак, мы выяснили это в комментариях, отметив, что python events.py работал нормально, давая понять, что \r сбивает с толку выполнение сценариев ядра. (#! interp [arg] фактически обрабатывается ядром, если это не удается, оболочка попытается это сделать, что приведет к обнаруженной ошибке.) Решение находится в руководстве svn в свойстве svn:eol-style.

...