如何导入其他Python文件?

我如何使用Python导入其他文件?

  • 我怎样才能导入一个特定的Python文件,如import file.py
  • 我如何导入文件夹而不是特定的文件?
  • 我想根据用户输入在运行时动态加载Python文件。
  • 我想知道如何从文件中加载一个特定的部分。
  • 例如,在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