2013-06-28 2 views
1

연산자 (등)을 포함하는 Python (2.7) 프로젝트가 있습니다."import numpy"가 내 패키지를로드하려고합니다.

나는 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.pytest/ 폴더를 실행할 때 그것은 괜찮습니다 포함되어 있습니다. 하지만 난 import numpy 내 자신의 util 패키지를 포함하고자하는 top-dir/로 이동할 때 :

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

관련 문제