2013-06-28 56 views
1

我有一個包含我自己的包util運算符(等等)的python(2.7)項目。我看過relative imports,但也許我不明白。我有以下目錄結構:「import numpy」試圖加載我自己的包

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.pytest/文件夾。但是,當我移動到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

operator是Python標準庫中的一個模塊。爲您的模塊提供與標準模塊相同的名稱會引起麻煩,應該避免。

如果你絕對需要一種方法來解決這個問題,你可以嘗試玩sys.path變量。第一個元素通常是腳本的目錄,或者是將導入系統指向當前目錄的空字符串。

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

感謝您的回答。不幸的是,他們努力實現相對路徑,然後像這樣的事情是不能避免的。 – Sebastian