Pythonで別のファイルから関数を呼び出す


498

Set_up:プログラムで使用する必要がある関数ごとに.pyファイルがあります。

このプログラムでは、外部ファイルから関数を呼び出す必要があります。

私はもう試した:

from file.py import function(a,b)

しかし、私はエラーを受け取ります:

ImportError: 'file.py'という名前のモジュールはありません。ファイルはパッケージではありません

この問題を解決するにはどうすればよいですか?


65
from file import function。ファイル拡張子や関数パラメータは
不要

4
おそらく、Pythonチュートリアルのモジュールセクションを確認する必要があります
Burhan Khalid

PyCharmsを使用する場合は、アンダースコアで区切られたファイル名のみが認識されることを確認してください。
Jerry

また、関数をからインポートする場合file.pyは、ディレクトリにという名前のパッケージがないことを確認してくださいfile
SomeBruh

回答:


554

file.pyインポート中に追加する必要はありません。書くだけでfrom file import function、を使用して関数を呼び出しますfunction(a, b)。これが機能しない理由fileは、がPythonのコアモジュールの1つであるためです。そのため、ファイルの名前を変更することをお勧めします。

a.pyからというファイルに関数をインポートするb.py場合は、a.pyb.pyが同じディレクトリにあることを確認する必要があります。


3
「ファイル」は、私が尋ねている質問の単なるプレースホルダーであり、実際のファイル名ではありません。ありがとう、結構です。私はこれを試して、あなたに戻ります。
user2977230 2013

4
私はこれを試しましたが、それでもエラーが表示されています:Python 3と何か関係がありますか、それとも一般的な問題ですか?
DarkRose、2015年

4
@GamesBrainiac、関数をインポートするファイルが別のディレクトリにある場合はどうなりますか?ファイル名の前にファイルパスを含めることはできますか、それとももっと複雑なものがありますか?
トム

6
@Tom PYTHONPATH変数にまだパスがない場合は、そのパスを追加する必要があります。
ゲームBrainiac

13
関数が同じディレクトリにない場合、a.pyからファイルb.pyに関数をインポートする方法はありますか?
Nirvan Sengupta 2016

193

まず第一にあなたは必要ありません.py

ファイルがa.pyあり、内部にいくつかの機能がある場合:

def b():
  # Something
  return 1

def c():
  # Something
  return 2

そして、z.pyあなたはあなたがそれらをインポートしたいので、あなたは書く必要があります

from a import b, c

47
インポートすることもできます*
Dimitar Marinov

1
@DimitarMarinov With *をファイル名に置き換えますか?
Karlo、2017

3
@Karlo、いいえ、ただ*
Dimitar Marinov

26
「インポート*」の使用は悪い習慣と考えられています。明示的は暗黙的より優れています。
フランシスコグティエレス2017

a.pyがfol1というフォルダーにある場合、それはどのようにインポートされますか?@ dimitar-marinov
Aditya C

57

これには2つの方法があります。まず、file.pyから必要な特定の関数をインポートするだけです。これを行うには

from file import function

別の方法は、ファイル全体をインポートすることです

import file as fl

次に、file.py内の任意の関数を使用して呼び出すことができます

fl.function(a,b)

36

作業中の同じディレクトリに関数を配置できない、または配置したくない場合は、別のディレクトリから関数を呼び出すこともできます。あなたはこれを2つの方法で行うことができます(おそらくもっと多くの選択肢がありますが、これらは私のために働いたものです)。

代替案1作業ディレクトリを一時的に変更する

import os

os.chdir("**Put here the directory where you have the file with your function**")

from file import function

os.chdir("**Put here the directory where you were working**")

代替案2 sys.pathに関数があるディレクトリを追加します

import sys

sys.path.append("**Put here the directory where you have the file with your function**")

from file import function

1
PYTHONPATHにパスを追加するのと同じではありませんか?
Birish

33

ファイルが別のパッケージ構造にあり、別のパッケージから呼び出したい場合は、次の方法で呼び出すことができます。

Pythonプロジェクトに次のパッケージ構造があるとします。

Pythonパッケージとファイル構造

in- com.my.func.DifferentFunctionPythonファイルには、次のような関数があります。

def add(arg1, arg2):
    return arg1 + arg2

def sub(arg1, arg2) :
    return arg1 - arg2

def mul(arg1, arg2) :
    return arg1 * arg2

そしてExample3.py、からさまざまな関数を呼び出したい場合は、次の方法で実行できます。

インポートステートメントをExample3.py-すべての関数をインポートするためのファイルに定義します

from com.my.func.DifferentFunction import *

または、インポートする各関数名を定義します

from com.my.func.DifferentFunction import add, sub, mul

次に、Example3.py実行のために関数を呼び出すことができます:

num1 = 20
num2 = 10

print("\n add : ", add(num1,num2))
print("\n sub : ", sub(num1,num2))
print("\n mul : ", mul(num1,num2))

出力:

 add :  30

 sub :  10

 mul :  200

3
globインポートは推奨されません。
jdhao

21

同じ機能に出くわしましたが、機能させるために以下を実行する必要がありました。

「ModuleNotFoundError:No module named」が表示された場合は、おそらく以下のようにファイル名の前にドット(。)が必要です。

.fileインポート機能から


13

まず、ファイルを.py形式(たとえばmy_example.py)で保存します。そして、そのファイルに機能がある場合、

def xyz():

        --------

        --------

def abc():

        --------

        --------

呼び出し関数では、以下の行を入力するだけです。

file_name:my_example2.py

============================

import my_example.py


a = my_example.xyz()

b = my_example.abc()

============================


2
私の失敗がpythonバージョンに関するものかどうかはわかりません。この例を選択するのはimport fn(拡張子なし)で、メインファイルで直接使用しますfn.my_funcion()import fn.pypy.pyファイルを読み込もうとすると、存在しません。を使用from fn.py import funcnameしてもうまくいきませんでした。ありがとうございました。
m3nda 2015年

13

モジュールの名前を「ファイル」以外に変更します。

次に、関数を呼び出すときに次のことも確認してください。

1)モジュール全体をインポートする場合は、呼び出すときにモジュール名を繰り返します。

import module
module.function_name()

または

import pizza
pizza.pizza_function()

2)または、特定の関数、エイリアス付きの関数、または*を使用するすべての関数をインポートする場合、モジュール名を繰り返す必要はありません。

from pizza import pizza_function
pizza_function()

または

from pizza import pizza_function as pf
pf()

または

from pizza import *
pizza_function()

9

.pyファイルの関数((もちろん)を別のディレクトリに置くこともできます)は、最初にディレクトリを書き込み、次に.py拡張子なしのファイル名を書き込むことで簡単にインポートできます。

from directory_name.file_name import function_name

そして後で使用されます: function_name()


8

MathMethod.Pyの内部。

def Add(a,b):
   return a+b 

def subtract(a,b):
  return a-b

Main.Pyの内部

import MathMethod as MM 
  print(MM.Add(200,1000))

出力:1200


6

追加する必要はありませんfile.py

インポートするファイルと同じ場所にファイルを保持するだけです。次に、関数をインポートします。

from file import a, b

確かにそうではありません。私は.pyを入力するつもりはありませんでした。タイプミスです
Mohan

4

インポートしようとしているPythonファイルと同じ場所にファイルがあるはずです。また、「ファイルからのインポート機能」で十分です。


4

コードを実行しているのと同じディレクトリにあるこのファイルをインポートする場合は、ファイル名の前にドット(。)を追加します。

たとえば、a.pyという名前のファイルを実行していて、b.pyに記述されているaddFunという名前のメソッドをインポートし、b.pyが同じディレクトリにあるとします。

from .b import addFun


2

呼び出すファイルがanotherfile.pyであり、呼び出すメソッドがmethod1であるとします。次に、最初にファイルをインポートし、次にメソッドをインポートします。

from anotherfile import method1

method1がクラスの一部である場合、クラスをclass1とします。

from anotherfile import class1

次に、class1のオブジェクトを作成します。オブジェクト名がob1であるとします。

ob1 = class1()
ob1.method1()

2

私の場合、私は自分のファイルに名前を付け、helper.scrap.py変更するまでそれを機能させることができませんでしたhelper.py


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