Pythonにおけるモジュール/パッケージのインポート方法の簡単なまとめ
[履歴] [最終更新] (2018/06/12 20:11:44)

概要

コードをファイル分割する場合、メインファイルでサブファイルをインポートする必要があります。
インポート可能なファイルは、

  1. サーチパスに含まれるディレクトリ直下のファイル (モジュールインポート)
  2. サーチパスに含まれるディレクトリ直下のディレクトリに含まれるファイル (パッケージインポート)

の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
関連ページ
    概要 distutils は python 標準のパッケージ管理ツールです。python のバージョンによって仕様が異なる等の理由もあり、setuptools の利用が推奨されていますが、distutils を直接使う場合について簡単な設定を記載します。 An Introduction to Distutils
    概要 ロボットアプリケーションの開発環境の一つ OpenRAVE (Open Robotics Automation Virtual Environment) の環境を構築するための手順を記載します。ここでは特に Debian9 を利用します。 インストール 依存パッケージ ビルドツール関連 sudo apt install git build-essential cmake
    概要 自動微分というアルゴリズムによって関数の微分値を求める例を記載します。本ページでは、一階微分を対象としており、高階微分は考えません。また簡単のため、関数の出力は一つのテンソルであり、入力となる一つ以上のテンソルおよび出力となる一つのテンソルの階数は零である例を考えます。 更に、関数は、微分可能な関数からなる合成関数であることを仮定します。これは自動微分の応用先の一つである、ディープラーニ