サーチ…


構文

  • import module_name
  • import module_name.submodule_name
  • from module_name import *
  • from module_name import submodule_name [、 クラス名関数名 、...など]
  • module_nameからimport some_name new_name
  • module_name.submodule_nameからimport class_name [、 function_name 、...など]

備考

モジュールをインポートすると、Pythonはこのモジュールのすべてのトップレベルコードを評価し、モジュールに含まれるすべての関数、クラス、および変数を学習します。あなたのモジュールを別の場所にインポートしたい場合は、トップレベルのコードに注意し、モジュールがインポートされたときに実行させたくない場合はif __name__ == '__main__':カプセル化してください。

モジュールのインポート

importステートメントを使用します。

>>> import random
>>> print(random.randint(1, 10))
4

import moduleimport moduleをインポートし、 module.name構文を使用して、そのオブジェクト(値、関数、クラスなど)を参照できるようにします。上記の例では、 randint関数を含むrandomモジュールがインポートされてrandintます。 randomをインポートすることで、 randintrandom.randint呼び出すことができます。

モジュールをインポートして別の名前に割り当てることができます。

>>> import random as rn
>>> print(rn.randint(1, 10))
4

あなたのpythonファイルmain.pycustom.pyと同じフォルダにある場合。次のようにインポートすることができます:

import custom

モジュールから関数をインポートすることもできます:

>>> from math import sin
>>> sin(1)
0.8414709848078965

特定の関数をより深くモジュールにインポートするには、ドット演算子をimportキーワードの左側でのみ使用します。

from urllib.request import urlopen

Pythonでは、関数をトップレベルから呼び出す2つの方法があります。 1つはimportあり、もう1つはfromです。名前の衝突の可能性があるときは、 importを使用する必要があります。 hello.pyファイルとworld.pyファイルにfunctionという名前の同じ関数があるとしfunctionimportステートメントはうまくいくでしょう。

from hello import function
from world import function

function() #world's function will be invoked. Not hello's  

一般的に、 importは名前空間を提供します。

import hello
import world

hello.function() # exclusively hello's function will be invoked 
world.function() # exclusively world's function will be invoked

あなたは十分に確信している場合でも、プロジェクト全体で使用する必要があり、同じ関数名を持つ方法はありませんfromステートメントは、

同じ行に複数のインポートを行うことができます。

>>> # Multiple modules
>>> import time, sockets, random
>>> # Multiple functions
>>> from math import sin, cos, tan
>>> # Multiple constants
>>> from math import pi, e

>>> print(pi)
3.141592653589793
>>> print(cos(45))
0.5253219888177297
>>> print(time.time())
1482807222.7240417

上記のキーワードと構文を組み合わせて使用​​することもできます。

>>> from urllib.request import urlopen as geturl, pathname2url as path2url, getproxies
>>> from math import factorial as fact, gamma, atan as arctan
>>> import random.randint, time, sys

>>> print(time.time())
1482807222.7240417
>>> print(arctan(60))
1.554131203080956
>>> filepath = "/dogs/jumping poodle (december).png"
>>> print(path2url(filepath))
/dogs/jumping%20poodle%20%28december%29.png

モジュールからの特定の名前のインポート

完全なモジュールをインポートする代わりに、指定された名前だけをインポートすることができます。

from random import randint # Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"
print(randint(1, 10))      # Out: 5

Pythonインタプリタはどのリソースから関数またはクラスをimport randintすべきかを知っていなければならimport randint 、また、 import randintは関数またはクラス自体を指定するため、 from random import randint必要です。

下の別の例(上記と同様):

from math import pi
print(pi)                  # Out: 3.14159265359

次の例では、モジュールをインポートしていないため、エラーが発生します。

random.randrange(1, 10)    # works only if "import random" has been run before

出力:

NameError: name 'random' is not defined

Pythonインタプリタは、あなたがrandom何を意味するのか理解していません。このサンプルにimport randomを追加して宣言する必要があります:

import random
random.randrange(1, 10)

モジュールからすべての名前をインポートする

from module_name import *

例えば:

from math import *
sqrt(2)    # instead of math.sqrt(2)
ceil(2.7)  # instead of math.ceil(2.7)

これにより、 mathモジュールで定義されているすべての名前がアンダースコアで始まる名前以外のグローバル名前空間にインポートされます(これは、ライターが内部使用のみであると感じることを示しています)。

警告 :同じ名前の関数がすでに定義またはインポートされている場合は、 上書きされます 。ほとんどの場合from math import sqrt, ceil特定の名前のみをfrom math import sqrt, ceilすることが推奨されます

def sqrt(num):
    print("I don't know what's the square root of {}.".format(num))

sqrt(4)
# Output: I don't know what's the square root of 4.

from math import * 
sqrt(4)
# Output: 2.0

スター付きのインポートは、モジュールレベルでのみ許可されます。クラスまたは関数定義でそれらを実行しようとすると、 SyntaxErrorます。

def f():
    from math import *

そして

class A:
    from math import *

どちらも失敗する:

SyntaxError: import * only allowed at module level

__all__特殊変数

モジュールには、 __all__という名前の特別な変数があり、 from mymodule import *使用from mymodule import *ときにどの変数をインポートするかを制限できます。

与えられたモジュール:

# mymodule.py

__all__ = ['imported_by_star']

imported_by_star = 42
not_imported_by_star = 21

imported_by_starれたfrom mymodule import *使用from mymodule import *

>>> from mymodule import *
>>> imported_by_star
42
>>> not_imported_by_star
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'not_imported_by_star' is not defined

ただし、 not_imported_by_starは明示的にインポートできます:

>>> from mymodule import not_imported_by_star
>>> not_imported_by_star
21

プログラムによるインポート

Python 2.x 2.7

関数呼び出しを通してモジュールをインポートするには、 importlibモジュール(バージョン2.7以降のPythonに含まれています)を使用します。

import importlib
random = importlib.import_module("random")

importlib.import_module()関数はパッケージのサブモジュールも直接インポートします:

collections_abc = importlib.import_module("collections.abc")

古いバージョンのPythonでは、 impモジュールを使用してください。

Python 2.x 2.7

imp.find_moduleおよびimp.load_module関数を使用して、プログラムによるインポートを実行します。

標準ライブラリのドキュメンテーションから取得

import imp, sys
def import_module(name):
    fp, pathname, description = imp.find_module(name)
    try:
        return imp.load_module(name, fp, pathname, description)
    finally:
        if fp:
            fp.close()

プログラムでモジュールをインポートするために__import__()を使用しないでください! sys.modulesfromlist引数など、 importlib.import_module()があなたのために扱うものを見落としやすい微妙な詳細があります。

任意のファイルシステムの場所からモジュールをインポートする

既にPython標準ライブラリやサイドパッケージとして組み込みモジュールとして存在していないモジュールをインポートする場合は、モジュールが見つかったディレクトリへのパスをsys.path追加することでこれを行うことができますsys.path 。これは、複数のPython環境がホスト上に存在する場合に便利です。

import sys
sys.path.append("/path/to/directory/containing/your/module")
import mymodule

モジュール自体へのパスではなく、 mymoduleが見つかったディレクトリへのパスを追加することが重要です。

PEP8の輸入規則

いくつかのPEP8スタイルの輸入ガイドラインが推奨されています。

  1. 輸入は別々の行にする必要があります:

     from math import sqrt, ceil      # Not recommended
     from math import sqrt            # Recommended
     from math import ceil
    
  1. モジュールの上部に次のようにインポートを注文します。

    • 標準ライブラリのインポート
    • 関連する第三者輸入
    • ローカルアプリケーション/ライブラリ固有のインポート
  2. ワイルドカードのインポートは、現在のネームスペース内の名前に混乱を招くので避けてください。 from module import *行うと、コード内の特定の名前がmoduleかどうかは不明です。これはfrom module import * -type文from module import *複数のfrom module import *がある場合には二重に当てはまります。

  3. 相対インポートを使用しないでください。代わりに明示的なインポートを使用してください。

サブモジュールのインポート

from module.submodule import function

これはmodule.submoduleからfunctionmodule.submoduleます。

__import __()関数

__import__()関数を使用して、実行時にのみ名前が分かっているモジュールをインポートすることができます

if user_input == "os":
    os = __import__("os")

# equivalent to import os

この関数を使用して、モジュールへのファイルパスを指定することもできます

mod = __import__(r"C:/path/to/file/anywhere/on/computer/module.py")

モジュールの再インポート

インタラクティブインタプリタを使用する場合、モジュールをリロードすることができます。これは、モジュールを編集していて最新のバージョンをインポートしたい場合や、既存のモジュールの要素を猿で修正して変更を元に戻したい場合に便利です。

モジュールを再度importして元に戻すことはできません

import math
math.pi = 3
print(math.pi)    # 3
import math
print(math.pi)    # 3

これは、インタープリターがインポートするすべてのモジュールを登録するためです。モジュールを再インポートしようとすると、インタープリタはそれをレジスタに入れて何もしません。再インポートする難しい方法は、レジスタから対応する項目を削除した後にimportを使用することです。

print(math.pi)    # 3
import sys
if 'math' in sys.modules:  # Is the ``math`` module in the register?
    del sys.modules['math']  # If so, remove it.
import math
print(math.pi)    # 3.141592653589793

しかし、もっと簡単で簡単な方法があります。

Python 2


reload関数を使用します。

Python 2.x 2.3
import math
math.pi = 3
print(math.pi)    # 3
reload(math)
print(math.pi)    # 3.141592653589793

Python 3


reload関数がimportlib移動しました:

Python 3.x 3.0
import math
math.pi = 3
print(math.pi)    # 3
from importlib import reload
reload(math)
print(math.pi)    # 3.141592653589793


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow