2016-11-28 1 views
0

2 개의 소스 파이썬 파일이있는 비교적 간단한 파이썬 모듈을 작성합니다.모듈 내 다른 파이썬 파일 가져 오기

구조는 그래서 같다 : 내가 가지고있는

├── MyModule 
│   ├── MyModule 
│   │   ├── __init__.py 
│   │   ├── file1.py 
│   │   ├── file2.py 
│   ├── requirements.txt 
│   ├── setup.py 

__init__.py의 내부

from .file1 import * 

가져올 때 단순히 mymodule.myFunction()

을 입력 할 수 있습니다 및 file1.py의 내부 내가 갖도록

import file2 

나는 pip install -e .을 사용하여 모듈을 설치합니다.

그러나 나는 그것을 가져 오려고 할 때 얻을 다음과 같은 오류 :

----> 1 import file2 
     2 import matplotlib.pyplot as plt 
     3 import numpy as np 
     4 import scipy.signal 

ImportError: No module named 'file2' 

무엇입니까 내가이 일을 가야하기로하고 허용 방법은?

+0

당신은'import MyModule'이어야하고 PYTHONPATH 나 sys.path 안에 MyModule의 경로가 있어야합니다 – Skycc

답변

0

.py 파일로 파일을 가져올 때 파일을 가져 오는 현재의 파이썬 환경을보고 따라서 file2.py를 볼 수없는 것 같습니다. 그러나 내가 대신 초기화 유형의 내부 경우

from .file2 import * 
from .file1 import * 

나는 일을 너무

MyModule.FunctionFromfile2(...) 

또 다른 방법은 같은 파일 1 내부 파일 2 내에 정의 된 기능을 사용할 수 있습니다

import MyModule 

다음 파일 1 유형의 내부

이것은 여기에 설명 된 서브 패키지를 초기화하는 것입니다. https://docs.python.org/2/distutils/examples.html. 인 MyModule에서 __init__.py의 내부

├── MyModule 
│ ├── MyModule 
│ │ ├── __init__.py 
│ │ ├── file1.py 
│ │ ├──MySubModule 
│ │ │ ├── __init__.py 
│ │  ├── file2.py 
│ ├── requirements.txt 
│ ├── setup.py 

내가 내부 from .file1 import *으로 파일 1을 가져 : 그 디렉토리 구조는 다음처럼 지금 내 특정 사건에 대한 분별이었다로

나는 서브 패키지로를 사용하여 종료 MySubModule 내의 __init__.py은 file2를 from .file2 import *으로 임포트합니다.

파일 1의 내부에서 나는 다음과 같이 MySubModule를 사용

import MyModule.MySubModule 

MyModule.MySubModule.FunctionFromfile2(...) 

이것은 모듈로 가져올 때 파일 1과 파일 2의 기능/객체의 이름 공간을 분리하는 이점이있다. 사용자가 MyModule.functionsFromfile1MyModule.MySubModule.functionsFromfile2을 볼 때

관련 문제