如何导入其他Python文件?
我如何使用Python导入其他文件?
import file.py
? 例如,在main.py
我有:
from extra import *
尽管这给了我extra.py
所有定义,但当我想要的只是一个单一定义时:
def gap():
print
print
我为什么要添加到import
语句才能从extra.py
获得gap
?
importlib
是Python中的新增功能,以编程方式导入模块。 它只是一个包装__import__
请参阅https://docs.python.org/3/library/importlib.html#module-importlib
import importlib
moduleName = input('Enter module name:')
importlib.import_module(moduleName)
更新:下面的答案已过时 。 使用上面更新的替代方法。
只需import file
没有'.py'扩展名的文件。
您可以通过添加名为__init__.py
的空文件将文件夹标记为包。
您可以使用__import__
函数。 它将模块名称作为字符串。 (Again:模块名称不带'.py'扩展名。)
pmName = input('Enter module name:')
pm = __import__(pmName)
print(dir(pm))
输入help(__import__)
以获取更多详细信息。
有很多方法可以导入一个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,从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 ...功能:
把它放在/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
主目录中
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中导入文件:
/home/el/foo5/
/home/el/foo5/herp
在herp下创建一个名为__init__.py
的空文件:
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
的新文件放在这里:
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
要用'已知名称'在'runtime'中导入特定的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
链接地址: http://www.djcxy.com/p/57933.html
上一篇: How to import other Python files?
下一篇: How to test thread