Pythonファイルをインポートするには多くの方法があり、すべて長所と短所があります。
すぐに機能する最初のインポート戦略を急いで選択しないでください。そうしないと、コードベースを後でニーズに合わない場合に書き直す必要があります。
最も簡単な例1の説明から始め、次に最もプロフェッショナルで堅牢な例7に移ります。
例1、Pythonインタープリターを使用してPythonモジュールをインポートします。
これを/home/el/foo/fox.pyに入れます:
def what_does_the_fox_say():
print("vixens cry")
Pythonインタープリターに入る:
el@apollo:/home/el/foo$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
>>> import fox
>>> fox.what_does_the_fox_say()
vixens cry
>>>
pythonインタープリターを介してfoxをインポートし、what_does_the_fox_say()
fox.py内からpython関数を呼び出しました。
例2、スクリプトでexecfile
or(exec
Python 3の場合)を使用して、他のpythonファイルを実行します。
これを/home/el/foo2/mylib.pyに入れます:
def moobar():
print("hi")
これを/home/el/foo2/main.pyに入れます:
execfile("/home/el/foo2/mylib.py")
moobar()
ファイルを実行します。
el@apollo:/home/el/foo$ python main.py
hi
関数moobarはmylib.pyからインポートされ、main.pyで利用可能になりました
例3:from ... import ...機能の使用:
これを/home/el/foo3/chekov.pyに入れます:
def question():
print "where are the nuclear wessels?"
これを/home/el/foo3/main.pyに入れます:
from chekov import question
question()
次のように実行します。
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
chekov.pyで他の関数を定義した場合、これらの関数は、 import *
例4、riaa.pyがインポートされた場所とは異なるファイルの場所にある場合はそれをインポートする
これを/home/el/foo4/stuff/riaa.pyに置きます:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
これを/home/el/foo4/main.pyに置きます:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
それを実行します:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
これにより、別のディレクトリから外部ファイルのすべてがインポートされます。
例5、使用 os.system("python yourfile.py")
import os
os.system("python yourfile.py")
例6、pythonの起動フックをピギーバックしてファイルをインポートします。
更新:この例はpython2と3の両方で機能していましたが、現在はpython2でのみ機能します。python3は、ユーザー定義のすべてのプログラムの前に、低スキルのpythonライブラリライターが悪用してコードをグローバルネームスペースに無作為に挿入したため、このユーザースタートアップフック機能セットを削除しました。これをpython3で機能させる場合は、より創造的になる必要があります。その方法を説明すると、Python開発者もその機能セットを無効にするので、ご自分で作業してください。
参照:https : //docs.python.org/2/library/user.html
このコードをホームディレクトリに配置します ~/.pythonrc.py
class secretclass:
def secretmessage(cls, myarg):
return myarg + " is if.. up in the sky, the sky"
secretmessage = classmethod( secretmessage )
def skycake(cls):
return "cookie and sky pie people can't go up and "
skycake = classmethod( skycake )
このコードをmain.pyに配置します(どこでもかまいません)。
import user
msg = "The only way skycake tates good"
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")
それを実行し、これを取得する必要があります:
$ python main.py
The only way skycake tates good is if.. up in the sky,
the skycookie and sky pie people can't go up and have the sky pie!
SKYCAKE!
ここでエラーが発生した場合:ModuleNotFoundError: No module named 'user'
python3を使用していることを意味し、startuphooksはデフォルトで無効になっています。
このjistのクレジットは、https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py up-boatsに送信されます。
例7、最も堅牢:最小限のインポートコマンドでPythonにファイルをインポートします。
- 新しいディレクトリを作成する
/home/el/foo5/
- 新しいディレクトリを作成する
/home/el/foo5/herp
__init__.py
herpの下に空のファイルを作成します。
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
新しいディレクトリ/ home / el / foo5 / herp / derpを作成します
derpの下で、別の__init__.py
ファイルを作成します。
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
/ home / el / foo5 / herp / derpの下に、yolo.py
Put this in there という新しいファイルを作成します。
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
真実の瞬間、新しいファイルを作成し/home/el/foo5/main.py
、これをそこに置きます。
from herp.derp.yolo import skycake
skycake()
それを実行します:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
空の__init__.py
ファイルは、開発者がこのディレクトリをインポート可能なパッケージにすることを意図していることをPythonインタープリターに伝えます。
ディレクトリの下にすべての.pyファイルを含める方法に関する私の投稿を表示するには、https://stackoverflow.com/a/20753073/445131を参照してください。