2016-11-28 6 views
0

2つのソースpythonファイルを持つ比較的単純なpythonモジュールをビルドします。モジュール内に別のpythonファイルをインポートする方法

構造はとても似ている:私は

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

__init__.pyの内部

from .file1 import * 

インポートしたとき、私は単にmymodule.myFunction()

を入力することができ、file1.pyの内部Iが有するよう

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

'MyModule'をインポートし、PYTHONPATHまたはsys.pathのMyModuleへのパスを確認してください – Skycc

答えて

0

.pyファイルにファイルをインポートすると、ファイルがインポートされている現在のpython環境が認識され、file2.pyが表示されないという問題が発生したようです。しかし、私の代わりに初期化タイプの内部

from .file2 import * 
from .file1 import * 

とFILE1タイプの内部

import MyModule 

その後、私はそう

MyModule.FunctionFromfile2(...) 

のようにファイル1の内側に行うための別の方法をFILE2内で定義された関数を使用することができる場合これは、ここで説明するサブパッケージを初期化することである。https://docs.python.org/2/distutils/examples.html

そのディレクトリ構造は非常に似今ある私の特定のケースのためのより賢明だったと私はサブパッケージとしてそれを使用して終了:私はfrom .file1 import *としての内側FILE1インポートMyModuleというにおける__init__.pyの内部

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

MySubModuleの中の__init__.pyは、ファイル2をfrom .file2 import *としてインポートします。 FILE1の内部

私はそのようにようMySubModule使用:

import MyModule.MySubModule 

MyModule.MySubModule.FunctionFromfile2(...) 

これはモジュールとしてインポート時にファイルfile1とfile2から機能/オブジェクトの名前空間を分離する利点を有します。ユーザーはMyModule.functionsFromfile1MyModule.MySubModule.functionsFromfile2と表示されます。

関連する問題