2017-10-02 2 views
0

예 : 나는 module.py를 가져 bar.py에 절대 가져 오기를 사용할 수있는 방법 모듈이같은 이름의 모듈을 사용하여 절대 경로로 가져 오는 방법은 무엇입니까?

/home/user/tmp/testPath/                                             
|-- foo                                                    
| |-- bar.py                                                  
| |-- foo.py                                                  
| |-- __init__.py                                                 
| `-- module.py                                                 
`-- test_package.py 

foo.py을 임명했다 패키지 foo이? from foo import moduleimport foo.module을 시도했지만 항상 생각합니다. foo is from foo.py

아니면 항상 패키지 이름과 동일한 이름의 모듈 파일 이름을 사용하지 않아야합니까?

foo.py

print 'you are in foo.py' 

import foo 
print 'foo', foo 

bar.py

print 'you are in bar.py' 

import foo 
print 'foo from bar', foo 

from foo import module 
# import foo.module 

test_package.py

import sys 

sys.path.insert(0, '/home/user/tmp/testPath') 

import foo.bar 

하지만 오류 메시지

you are in bar.py 
you are in foo.py 
foo <module 'foo.foo' from '/home/user/tmp/testPath/foo/foo.py'> 
foo from bar <module 'foo.foo' from '/home/user/tmp/testPath/foo/foo.py'> 
Traceback (most recent call last): 
    File "/home/user/tmp/testPath/test_package.py", line 5, in <module> 
    import foo.bar 
    File "/home/user/tmp/testPath/foo/bar.py", line 8, in <module> 
    from foo import module 
ImportError: cannot import name module 
이다

답변

1

python 2에서는 py3 스타일 가져 오기를 활성화해야합니다.

bar.py : 파이썬 3에서

from __future__ import absolute_import 
from foo import module 

, 모든 것이 이미 일반해야하지만, 앞으로 가져 오기 (즉, 코드를 깨는되지 않음) 어떠한 효과와 함께 일하게됩니다.

문서화되고 권장되는 방법입니다. 프로젝트의 모든 파일에이 미래의 가져 오기 (및 나머지는 거의 포함하지 않음)를 사용하는 것이 좋습니다. 처음부터 py3과의 호환성을 향상시킬 수 있습니다.

도 참조하십시오. https://www.python.org/dev/peps/pep-0328/

관련 문제