2013-06-12 110 views
2

我是github的新手,我試圖安裝unicodecsv(https://github.com/jdunck/python-unicodecsv)。爲Python安裝unicode csv?

我想

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是您的'PATH'上的第一個'pip'命令? – abarnert

+0

另外,出於好奇,你爲什麼要安裝這個關閉github,而不是隻安裝最新發布的版本在PyPI與'pip install unicodecsv'? – abarnert

+0

1)Python 2.7.2。 2)pip安裝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那樣的問題。您可以傳遞csv模塊文本/ Unicode文件對象,它只會處理它們。修改實例從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的(如,你知道你安裝了它,但你小心地保持蘋果的預先安裝在PATH Python 2.7版以上),有這是可能發生的三個常見原因。

  • 蘋果的Python不帶pip;所有流行的Python 3.x安裝程序和軟件包都可以。所以,如果你還沒有安裝pip for 2.7,你唯一的一個是3.x.

  • 蘋果的Python安裝腳本如pip/usr/local/bin。因此,請執行一些流行的Python 3.x安裝程序和軟件包。所以,無論你最近安裝的是哪個,都會贏。 (3.x的一個也應該作爲/usr/local/bin/pip3,所以覆蓋其/usr/local/bin/pip 2.7的通常是罰款...除非pip3是一個符號鏈接pip。)

  • sudo故意丟棄您的用戶環境中的大多數,所以2.7在運行時可能會更高,但在運行時爲sudo

+0

這不是新語法的樣子。 –

+0

@ IgnacioVazquez-Abrams:哎呀,我最初寫了關於新的'raise'和'except'語法,然後決定這是比必要更多的細節,並刪除'raise'部分,然後不正確地編輯它。謝謝你的收穫! – abarnert

+0

非常感謝。我遇到的問題是我正在用CSV讀取數據?替換特殊字符。例如,「聖保羅」的內容是「聖保羅」。 –