他のファイルで使用する外部Pythonコードを含める方法は?


117

ファイルにメソッドのコレクションがある場合、それらのファイルを別のファイルに含める方法はありますが、プレフィックス(つまり、ファイルのプレフィックス)なしで呼び出す方法はありますか?

だから私が持っている場合:

[Math.py]
def Calculate ( num )

次のように呼び出すにはどうすればよいですか。

[Tool.py]
using Math.py

for i in range ( 5 ) :
    Calculate ( i )

回答:


154

他のファイルを次のようなモジュールとしてインポートする必要があります:

import Math

Calculate関数の前にモジュール名を付けたくない場合は、次のようにします。

from Math import Calculate

モジュールのすべてのメンバーをインポートする場合は、次のようにします。

from Math import *

編集: ここでは良いの章であるから飛び込むのPython、このトピックに深さにもう少し行きます。


9
これfrom Math import *お勧めできません
naught101

1
あなたは興味深いimpモジュールと魔法の呼び出しがあります__import__
Vitold S.

誰かがドメインの更新を忘れました:\
Spechal

48

"include"コマンドを書くだけです:

import os

def include(filename):
    if os.path.exists(filename): 
        execfile(filename)


include('myfile.py')

@Deleet:

@bfieck remarkは正しいです。python2と3の互換性のために、次のいずれかが必要です。

Python 2および3:代替1

from past.builtins import execfile

execfile('myfile.py')

Python 2および3:代替2

exec(compile(open('myfile.py').read()))

3
これをやり直す理由はありますfrom module import *か?また、呼び出すファイルの本文にコードがある場合、これを実行すると、そのコードが実行されます。
naught101

4
@ naught101:それが目標です。インポートでは発生しないコードを実行することです。通常は、変数を定義するだけです。
ルイ

2
@Deleet python 3にはありませんexecfile
bfieck

7
実際、python 3にはcompile()、上記以外の署名があります。正しいPythonの2と3は、だから:代替2は次のようになりますexec(compile(source=open('myfile.py').read(), filename='myfile.py', mode='exec'))
TriAnMan

3
'include'の呼び出し元のスコープ内のインクルードファイルの変数を使用する場合、 'include'ヘルパー関数は機能しません
paulj

35

使用する場合:

import Math

そうすれば、Mathの関数を使用できるようになりますが、Math.Calculateを実行する必要があるため、明らかにそれは望ましくありません。

プレフィックスを付けずにモジュールの関数をインポートする場合は、次のように明示的に名前を付ける必要があります。

from Math import Calculate, Add, Subtract

これで、計算、加算、減算を名前だけで参照できるようになりました。Mathからすべての関数をインポートしたい場合は、次のようにします。

from Math import *

ただし、内容が不明なモジュールでこれを行う場合は、十分に注意する必要があります。同じ関数名の定義を含む2つのモジュールをインポートすると、一方の関数がもう一方の関数を上書きします。


1

私はpython検査モジュールが非常に役立つことがわかりました

たとえばteststuff.py

import inspect

def dostuff():
    return __name__

DOSTUFF_SOURCE = inspect.getsource(dostuff)

if __name__ == "__main__":

    dostuff()

そして、別のスクリプトまたはpythonコンソールから

import teststuff

exec(DOSTUFF_SOURCE)

dostuff()

そして今、dostuffはローカルスコープにあり、dostuff()はコンソールまたはスクリプト_ name _を返しますが、test.dostuff()を実行するとpythonモジュール名が返されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.