2017-11-13 5 views
2

나는 이것을 연구하는 데 시간을 보냈다. 나는이 문제를 내 머리 속에서 해결할 수 없다.sys.path 및 os.path 문제로 가져 오는 Python 모듈

은 내가 시도하고 모듈에 다른 디렉토리에있는라고 my_module.py 먹으 렴을 가져 main.py에서

이 집/프로그램을 말할 자신의 디렉토리 홈/프로그램/코어/main.py에서 프로그램을 실행 /modules/my_module.py

main.py에서 sys.path에이 코드를 추가하여 모든 사람의 컴퓨터에서 프로그램을 실행할 수 있습니다 (잘하면).

import os.path 
import sys 

# This should give the path to home/program 
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__), '..')) 
# Which it does when checking with 
print os.path.join(os.path.abspath(os.path.dirname(__file__), '..') 

# So now sys.path knows the location of where modules directory is, it should work right? 

import modules.my_module # <----RAISES ImportError WHY? 

그러나 단순히 할 경우 : 그것은 모두 잘 작동

sys.path.append('home/program/modules') 
import my_module 

. 그러나 이것은 프로그램이 가정/프로그램 아래 있어야한다는 사실에 달려 있기 때문에 이상적이지 않습니다. modules 그것은 (당신은 그들없이 import 이송 디렉토리가 __init__.py 표시되지 수) 어떤 __init__.py 파일을 포함하지 않는 아마 때문에, 유효한 파이썬 패키지 아니므로의

답변

1

그래서 하나 비어를 추가

sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__), '..','modules')) 
import my_module 

주도를 가져올 수 있습니다 __init__.py 파일이나 단지 modules의 경로를 추가 그래서 첫 번째 조각은 두 번째에 해당 모듈에 대한 전체 경로를 제공하여 고급 가져 오기 기능을 사용하십시오. How to import a module given the full path?

+0

그러나 내 문제는 왜 무의미한 __init__.py 파일을 사용해야합니까 ?? 방금 my_module.py가있는 디렉터리를 깨끗하게 유지하기 위해 my_module.py가 실제로 해당 디렉터리의 유일한 파일이됩니다. 'sys.path.append ('home/programs/modules')'는'__init __. py' 파일없이 작동합니다. –

+0

그것이 파이썬이 작동하는 이유입니다. '__init __. py '로 표시하지 않고'import'를 사용하여 디렉토리를 트래버스 할 수는 없습니다. 두 번째 해결책은 여전히 ​​있습니다 : "모듈"까지 경로 추가. –

+0

ok 그러나 모듈을 가져올 수있는 코드를 어떻게 구현합니까? 모듈 디렉토리에 경로를 추가하여 __init__.py –