Python:如何导入其他Python文件

如何在Python中导入其他文件?

  1. 我怎样才能导入一个特定的Python文件,如import file.py
  2. 我怎样才能导入一个文件夹,而不是一个特定的文件?
  3. 我想基于用户input在运行时dynamic加载一个Python文件。
  4. 我想知道如何从文件中加载一个特定的部分。

例如,在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。

  1. 只需import file没有“.py”扩展名的文件。

  2. 您可以通过添加名为__init__.py的空文件将文件夹标记为包。

  3. 您可以使用__import__函数。 它将模块名称作为一个string。 (再次:没有“.py”扩展名的模块名称。)

     pmName = input('Enter module name:') pm = __import__(pmName) print(dir(pm)) 

    inputhelp(__import__)以获取更多详细信息。

有很多方法可以导入一个python文件,所有的优点和缺点。

不要只是匆忙地select适合您的第一个导入策略,否则当您发现它不能满足您的需求时,您将不得不重写代码库。

我将开始解释最简单的例子#1,然后我将走向最专业和强大的例子#7

例1,用python解释器导入一个python模块:

  1. 把它放在/home/el/foo/fox.py中:

     def what_does_the_fox_say(): print("vixens cry") 
  2. 进入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文件:

  1. 把它放在/home/el/foo2/mylib.py中:

     def moobar(): print("hi") 
  2. 把它放在/home/el/foo2/main.py中:

     execfile("/home/el/foo2/mylib.py") moobar() 
  3. 运行该文件:

     el@apollo:/home/el/foo$ python main.py hi 

    moobar函数是从mylib.py导入的,并在main.py中可用

示例3,使用from … import …function:

  1. 把它放在/home/el/foo3/chekov.py中:

     def question(): print "where are the nuclear wessels?" 
  2. 把它放在/home/el/foo3/main.py中:

     from chekov import question question() 
  3. 像这样运行它:

     el@apollo:/home/el/foo3$ python main.py where are the nuclear wessels? 

    如果你在chekov.py中定义了其他函数,除非你import *

例4,导入riaa.py,如果它位于与导入位置不同的文件位置

  1. 把它放在/home/el/foo4/stuff/riaa.py:

     def watchout(): print "computers are transforming into a noose and a yoke for humans" 
  2. 把它放在/home/el/foo4/main.py中:

     import sys import os sys.path.append(os.path.abspath("/home/el/foo4/stuff")) from riaa import * watchout() 
  3. 运行:

     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中导入文件:

  1. build立一个新目录/home/el/foo5/
  2. build立一个新的目录/home/el/foo5/herp
  3. 在herp下创build一个名为__init__.py的空文件:

     el@apollo:/home/el/foo5/herp$ touch __init__.py el@apollo:/home/el/foo5/herp$ ls __init__.py 
  4. build立一个新的目录/ home / el / foo5 / herp / derp

  5. 在derp下,创build另一个__init__.py文件:

     el@apollo:/home/el/foo5/herp/derp$ touch __init__.py el@apollo:/home/el/foo5/herp/derp$ ls __init__.py 
  6. 在/ 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!!" 
  7. 在这一刻,把新文件/home/el/foo5/main.py ,放在那里;

     from herp.derp.yolo import skycake skycake() 
  8. 运行:

     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软件包中的一个很好的解释。