“import numpy”尝试加载我自己的包

时间:2013-06-28 09:07:31

标签: python python-2.7 package python-import

我有一个python(2.7)项目,包含我自己的包 util operator (等等)。

我读到relative imports,但也许我不明白。我有以下目录结构:

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

我该怎么办?

1 个答案:

答案 0 :(得分:1)

operator是Python标准库中的一个模块。为您的模块提供与标准模块相同的名称会产生麻烦,应该避免使用。

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

oldpath = sys.path.pop(0)
import numpy
sys.path.insert(0, oldpath)