Pythonにおけるモジュール/パッケージのインポート方法の簡単なまとめ
[履歴] [最終更新] (2018/06/12 20:11:44)
1
作品
410
技術情報
最近の投稿
ここは
趣味の電子工作を楽しむ人のためのハードウェア情報共有サイト

技術情報や作品の投稿機能、リアルタイム遠隔操作 API をご利用いただけます。
新着作品

概要

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

  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