1

我有一个 python (2.7) 项目,其中包含我自己的包utiloperator(等等)。

我读到了相对进口,但也许我不明白。我有以下目录结构:

top-dir/
  util/__init__.py (empty)
  util/ua.py
  util/ub.py
  operator/__init__.py 
   ...

  test/test1.py

test1.py文件包含

#!/usr/bin/env python2
from __future__ import absolute_import # removing this line dosn't change anything. It's default functionality in python2.7 I guess
import numpy as np

当我test1.py test/文件夹中执行时很好。但是当我移动到top-dir/想要import numpy包含我自己的util包时:

Traceback (most recent call last):
  File "tests/laplace_2d_square.py", line 4, in <module>
    import numpy as np
  File "/usr/lib/python2.7/site-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/usr/lib/python2.7/site-packages/numpy/add_newdocs.py", line 9, in <module>
    from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/site-packages/numpy/lib/__init__.py", line 4, in <module>
    from type_check import *
  File "/usr/lib/python2.7/site-packages/numpy/lib/type_check.py", line 8, in <module>
    import numpy.core.numeric as _nx
  File "/usr/lib/python2.7/site-packages/numpy/core/__init__.py", line 45, in <module>
    from numpy.testing import Tester
  File "/usr/lib/python2.7/site-packages/numpy/testing/__init__.py", line 8, in <module>
    from unittest import TestCase
  File "/usr/lib/python2.7/unittest/__init__.py", line 58, in <module>
    from .result import TestResult
  File "/usr/lib/python2.7/unittest/result.py", line 9, in <module>
    from . import util
  File "/usr/lib/python2.7/unittest/util.py", line 2, in <module>
    from collections import namedtuple, OrderedDict
  File "/usr/lib/python2.7/collections.py", line 9, in <module>
    from operator import itemgetter as _itemgetter, eq as _eq
ImportError: cannot import name itemgetter

麻烦的线是

    from . import util

也许

    from operator import itemgetter as _itemgetter, eq as _eq

我能做些什么?

4

1 回答 1

1

运算符是 Python 标准库中的一个模块。将您的模块与标准模块同名会带来麻烦,应该避免。

如果您绝对需要一种方法来解决这个问题,您可以尝试使用该sys.path变量。第一个元素通常是脚本的目录,或者是引导导入系统到当前目录的空字符串。

oldpath = sys.path.pop(0)
import numpy
sys.path.insert(0, oldpath)
于 2013-06-28T10:15:13.263 回答