2

我是 github 新手,我正在尝试安装 unicodecsv ( https://github.com/jdunck/python-unicodecsv )。

我正在努力

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
4

1 回答 1

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它是 Unicodestr缓冲区,而不是bytes缓冲区。您根本不必担心编码。


如果您甚至不知道您正在运行 Python 3.x(例如,您知道您已安装它,但您小心地将 Apple 预安装的 Python 2.7 保留在 PATH 上),这可能发生的三个常见原因.

  • Apple 的 Python 不附带pip; 所有流行的 Python 3.x 安装程序和包都可以。因此,如果您还没有安装pip2.7,那么您唯一拥有的就是 3.x。

  • Apple 的 Python 安装脚本pip,例如/usr/local/bin. 一些流行的 Python 3.x 安装程序和软件包也是如此。因此,无论您最近安装的是哪个获胜。(3.x 也应该以 . 形式提供/usr/local/bin/pip3,因此用 2.7 覆盖它/usr/local/bin/pip通常很好……除非pip3是指向 . 的符号链接pip。)

  • sudo故意丢弃您的大部分用户环境,因此PATH当您自己运行时,您的 2.7 可能会更高,但在使用sudo.

于 2013-06-12T23:18:50.253 回答