コードをファイル分割する場合、メインファイルでサブファイルをインポートする必要があります。
インポート可能なファイルは、
- サーチパスに含まれるディレクトリ直下のファイル (モジュールインポート)
- サーチパスに含まれるディレクトリ直下のディレクトリに含まれるファイル (パッケージインポート)
の2種類があります。
モジュールインポート
サーチパスには、
- メインファイルが存在するディレクトリ
- 環境変数$PYTHONPATHで指定されたディレクトリ
などがあります。以下では、メインファイルが存在するディレクトリにサブファイルが存在している場合の例を示しています。
import
ディレクトリ構成
$ tree .
.
|-- main.py
`-- sub.py
main.py
#!/usr/bin/python
import sub
print sub.x
sub.setX(256)
print sub.x
sub.x = 512
print sub.x
sub.py
x = 128
def setX(var):
global x
x = var
実行例
$ python main.py
128
256
512
実行後のディレクトリ構成 (バイトコンパイルされたsub.pycが生成されています)
$ tree .
.
|-- main.py
|-- sub.py
`-- sub.pyc
from import
C++などにおける、using namespaceに相当するインポート方法もあります。
ディレクトリ構成
$ tree .
.
|-- main.py
`-- sub.py
main.py
#!/usr/bin/python
from sub import setX,getX
setX(1024)
print getX()
sub.py
x = 128
def setX(var):
global x
x = var
def getX():
global x
return x
実行例
$ python main.py
1024
パッケージインポート
サブディレクトリ内のファイルをインポート (パッケージインポート) するためには、空の__init__.pyファイルを作成し、
ディレクトリのパス情報を含めたimportあるいはfrom import宣言を記述します。
ディレクトリ構成
$ tree .
.
|-- main.py
`-- my
|-- __init__.py
`-- sub.py
main.py
#!/usr/bin/python
import my.sub
print my.sub.x
my.sub.setX(256)
print my.sub.x
my.sub.x = 512
print my.sub.x
sub.py
x = 128
def setX(var):
global x
x = var
実行例
$ python main.py
128
256
512
実行後のディレクトリ構成
$ tree .
.
|-- main.py
`-- my
|-- __init__.py
|-- __init__.pyc
|-- sub.py
`-- sub.pyc
__init__.py で import する書き方
__init__.py に import 文が記載してある場合は、利用する際にディレクトリを指すように import することができます。
my/__init__.py
# -*- coding: utf-8 -*-
import my.sub
main.py
#!/usr/bin/python
import my # このように書ける
#import my.sub
print my.sub.x
my.sub.setX(256)
print my.sub.x
my.sub.x = 512
print my.sub.x
プログラミング教育者。ScratchやPythonを教えています。
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。


