Python:如何导入其他Python文件
如何在Python中导入其他文件?
- 我怎样才能导入一个特定的Python文件,如
import file.py
? - 我怎样才能导入一个文件夹,而不是一个特定的文件?
- 我想基于用户input在运行时dynamic加载一个Python文件。
- 我想知道如何从文件中加载一个特定的部分。
例如,在main.py
我有:
from extra import *
虽然这给了我extra.py
所有的定义,也许我想要的只是一个单一的定义:
def gap(): print print
什么我添加到import
声明只是从extra.py
gap
?
importlib
是Python中的新增function,以编程方式导入模块。 它只是一个包装__import__
请参阅https://docs.python.org/3/library/importlib.html#module-importlib
moduleName = input('Enter module name:') import_module(moduleName)
更新:下面的答案已经过时 。 使用上面更新的select。
-
只需
import file
没有“.py”扩展名的文件。 -
您可以通过添加名为
__init__.py
的空文件将文件夹标记为包。 -
您可以使用
__import__
函数。 它将模块名称作为一个string。 (再次:没有“.py”扩展名的模块名称。)pmName = input('Enter module name:') pm = __import__(pmName) print(dir(pm))
input
help(__import__)
以获取更多详细信息。
有很多方法可以导入一个python文件,所有的优点和缺点。
不要只是匆忙地select适合您的第一个导入策略,否则当您发现它不能满足您的需求时,您将不得不重写代码库。
我将开始解释最简单的例子#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,从fox.py中调用python函数
what_does_the_fox_say()
。
例2,在脚本中使用execfile
或( Python 3中的exec
)来执行另一个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 …function:
-
把它放在/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 startuphook导入你的文件:
请参阅: https : //docs.python.org/2/library/user.html
把这段代码放到~/.pythonrc.py
主目录~/.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!
这个jist的信用: https : //github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py发送你的船。
示例7,最强大:使用裸导入命令在python中导入文件:
- build立一个新目录
/home/el/foo5/
- build立一个新的目录
/home/el/foo5/herp
-
在herp下创build一个名为
__init__.py
的空文件:el@apollo:/home/el/foo5/herp$ touch __init__.py el@apollo:/home/el/foo5/herp$ ls __init__.py
-
build立一个新的目录/ home / el / foo5 / herp / derp
-
在derp下,创build另一个
__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下创build一个名为
yolo.py
的新文件放在这里: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
奖金protip
无论您使用的是Mac,Linux还是Windows,都需要使用python的空闲编辑器,如下所述。 它将解开你的Python世界。 http://www.youtube.com/watch?v=DkW5CSZ_VII
要使用已知名称在“运行时”导入特定的Python文件,请执行以下操作:
import os import sys
…
scriptpath = "../Test/MyModule.py" # Add the directory containing your module to the Python path (wants absolute paths) sys.path.append(os.path.abspath(scriptpath)) # Do the import import MyModule
您没有许多复杂的方法将python文件从一个文件夹导入到另一个文件夹。 只要创build一个__init__.py文件来声明这个文件夹是一个python包,然后转到你想要导入的主机文件就可以了
from root.parent.folder.file import variable, class, whatever
导入文档
需要使用__init__.py
文件来使Python将目录当作包含对象的目录,这样做是为了防止具有通用名称的目录(如string)无意中隐藏稍后在模块searchpath中发生的有效模块。
__init__.py
可以只是一个空文件,但也可以执行包的初始化代码或设置__all__
variables。
mydir/spam/__init__.py mydir/spam/module.py import spam.module or from spam import module
我如何导入是导入文件,并使用它的名字的简写。
import DoStuff.py as DS DS.main()
不要忘了你的导入文件必须以.py扩展名命名
导入.py文件的最好方法是__init__.py
。 最简单的做法是在your.py文件所在的目录下创build一个名为__init__.py
的空文件。
这篇由Mike Grouchy 发表的文章是对__init__.py
及其在制作,导入和设置python软件包中的一个很好的解释。