2013-06-12 2 views
2

Я новичок в github, и я пытаюсь установить unicodecsv (https://github.com/jdunck/python-unicodecsv).Установка unicode csv для Python?

Я пытаюсь

sudo pip install -e git://github.com/jdunck/python-unicodecsv.git#egg=unicodecsv 

Но я получаю сообщение об ошибке. Я, наверное, делаю чей-то основной недостаток, может кто-то помочь?

Obtaining unicodecsv from git+git://github.com/jdunck/python-unicodecsv.git#egg=unicodecsv 
    Cloning git://github.com/jdunck/python-unicodecsv.git to ./src/unicodecsv 
    Running setup.py egg_info for package unicodecsv 
    Traceback (most recent call last): 
     File "<string>", line 14, in <module> 
     File "/Users/dave/Dropbox/Promoter/working/src/unicodecsv/setup.py", line 5, in <module> 
     version = __import__('unicodecsv').__version__ 
     File "unicodecsv/__init__.py", line 49 
     except TypeError, e: 
         ^
    SyntaxError: invalid syntax 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 

    File "<string>", line 14, in <module> 

    File "/Users/dave/Dropbox/Promoter/working/src/unicodecsv/setup.py", line 5, in <module> 

    version = __import__('unicodecsv').__version__ 

    File "unicodecsv/__init__.py", line 49 

    except TypeError, e: 

        ^

SyntaxError: invalid syntax 

---------------------------------------- 
Command python setup.py egg_info failed with error code 1 
Storing complete log in /Users/dave/.pip/pip.log 
Davids-MacBook-Air:working dave$ sudo pip install -e git://github.com/jdunck/python-unicodecsv.git#egg=unicodecsv 
Obtaining unicodecsv from git+git://github.com/jdunck/python-unicodecsv.git#egg=unicodecsv 
    Updating ./src/unicodecsv clone 
^[ Running setup.py egg_info for package unicodecsv 
    Traceback (most recent call last): 
     File "<string>", line 14, in <module> 
     File "/Users/dave/Dropbox/Promoter/working/src/unicodecsv/setup.py", line 5, in <module> 
     version = __import__('unicodecsv').__version__ 
     File "unicodecsv/__init__.py", line 49 
     except TypeError, e: 
         ^
    SyntaxError: invalid syntax 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 

    File "<string>", line 14, in <module> 

    File "/Users/dave/Dropbox/Promoter/working/src/unicodecsv/setup.py", line 5, in <module> 

    version = __import__('unicodecsv').__version__ 

    File "unicodecsv/__init__.py", line 49 

    except TypeError, e: 

        ^

SyntaxError: invalid syntax 

---------------------------------------- 
Command python setup.py egg_info failed with error code 1 
Storing complete log in /Users/dave/.pip/pip.log 
+0

Какую версию Python вы используете? Или, в частности, какая версия Python является первой командой 'pip' на вашем' PATH', используя? – abarnert

+0

Кроме того, из любопытства, почему вы устанавливаете это с github вместо того, чтобы просто устанавливать последнюю выпущенную версию на PyPI с помощью 'pip install unicodecsv'? – abarnert

+0

1) Python 2.7.2. 2) pip install unicodecsv дает мне ту же ошибку. –

ответ

3

Проблема заключается в том, что вы используете Python 3.0 или более позднюю версию, и пытаетесь использовать библиотеку, которая совместима только с 2.7 и более ранними версиями.

Специфическая проблема является линией точек Обратного прослеживания на:

except TypeError, e: 

Этот синтаксис осуждались в 2.6, в пользу (более гибкого и более последовательного) нового синтаксис:

except TypeError as e: 

В 3.0 и более поздних версий, устаревший синтаксис больше не разрешен.

Итак, если вы хотите использовать эту библиотеку, кому-то придется ее портировать - вы, автор или кто-то другой. Это может быть просто запуск 2to3 или исправление каждого оператора except вручную, но это может быть намного больше, чем это сделать, особенно учитывая, что эта библиотека относится к Unicode.


Однако стоит отметить, что Python 3.x не имеет той же проблемы, что и 2.x. Вы можете передать текстовые/текстовые объекты модуля Unicode csv, и он будет просто обрабатывать их. Адаптирование примера из unicodecsv документов:

>>> import csv 
>>> from io import StringIO 
>>> f = StringIO() 
>>> w = csv.writer(f) 
>>> w.writerow(('é', 'ñ')) 
>>> f.seek(0) 
>>> r = csv.reader(f) 
>>> row = r.next() 
>>> print row[0], row[1] 
é ñ 

Обратите внимание, что я даже не нужен указывать utf-8, потому что StringIO является Unicode str буфера, а не bytes буфера. Вам вообще не нужно беспокоиться о кодировании.


Если вы даже не знаете, что вы были запущены Python 3.x (как, вы знали, что вы установили его, но вы были осторожны, чтобы Apple, предварительно установленный Python 2.7 выше на PATH), там это три общие причины, по которым это может произойти.

  • Apple Python не поставляется с pip; все популярные инсталляторы и пакеты Python 3.x. Итак, если вы не установили pip для 2.7, то только у вас есть 3.x.

  • Apple Python устанавливает сценарии, такие как pip - /usr/local/bin. Так делают некоторые из популярных инсталляторов и пакетов Python 3.x. Итак, в зависимости от того, что вы недавно установили, выигрывает. (The 3.x один также должен быть доступен как /usr/local/bin/pip3, так перезаписать его /usr/local/bin/pip с 2,7-х, как правило, хорошо ... если pip3 не является символической ссылкой на pip.)

  • sudo сознательно отбрасывает большую часть пользовательской среды, поэтому 2.7 может быть выше на вашем PATH при работе как самостоятельно, но не при работе с sudo.

+0

Это не похоже на новый синтаксис. –

+0

@ IgnacioVazquez-Abrams: Ой, я изначально писал о новом синтаксисе 'raise' и' except', а затем решил, что это было более подробно, чем необходимо, и удалил части 'raise', а затем отредактировал его неправильно. Спасибо за улов! – abarnert

+0

Большое спасибо за это. Проблема в том, что я читаю данные из CSV? заменяя специальные символы. Например, «Сан-Паулу» читается как «S? O Paulo». –

Смежные вопросы