如何导入其他Python文件?

如何导入其他Python文件?,python,python-import,python-module,python-packaging,Python,Python Import,Python Module,Python Packaging,如何导入Python中的其他文件 如何准确地导入特定的python文件,如import file.py 如何导入文件夹而不是特定文件 我希望在运行时基于用户动态加载Python文件 输入 我想知道如何从文件中只加载一个特定部分 例如,在main.py中,我有: from extra import * 虽然这为我提供了extra.py中的所有定义,但我可能只需要一个定义: def gap(): print print 要从extra.py获取gap,我应该向import语句添

如何导入Python中的其他文件

  • 如何准确地导入特定的python文件,如
    import file.py
  • 如何导入文件夹而不是特定文件
  • 我希望在运行时基于用户动态加载Python文件 输入
  • 我想知道如何从文件中只加载一个特定部分
  • 例如,在
    main.py
    中,我有:

    from extra import * 
    
    虽然这为我提供了
    extra.py
    中的所有定义,但我可能只需要一个定义:

    def gap():
        print
        print
    
    要从
    extra.py
    获取
    gap
    ,我应该向
    import
    语句添加什么?

    已添加到Python3,以编程方式导入模块

    导入导入库
    moduleName=input('输入模块名称:')
    importlib.import_模块(moduleName)
    
    .py扩展名应从
    moduleName
    中删除。该函数还为相对导入定义了一个
    package
    参数

    在python 2.x中:

    • 只需导入文件,不带.py扩展名
    • 通过添加一个空的
      \uuuu init\uuuu.py
      文件,可以将文件夹标记为包
    • 您可以使用
      \uuuuuuuuuuuuuuuuu导入
      函数,该函数将模块名(不带扩展名)作为字符串扩展名
    pmName=input('输入模块名称:')
    pm=\uuuu导入(pmName)
    印刷(主任(下午))
    
    键入
    help(\uuuu import\uuuu)
    了解更多详细信息。

    已添加到Python3中,以编程方式导入模块

    导入导入库
    moduleName=input('输入模块名称:')
    importlib.import_模块(moduleName)
    
    .py扩展名应从
    moduleName
    中删除。该函数还为相对导入定义了一个
    package
    参数

    在python 2.x中:

    • 只需导入文件,不带.py扩展名
    • 通过添加一个空的
      \uuuu init\uuuu.py
      文件,可以将文件夹标记为包
    • 您可以使用
      \uuuuuuuuuuuuuuuuu导入
      函数,该函数将模块名(不带扩展名)作为字符串扩展名
    pmName=input('输入模块名称:')
    pm=\uuuu导入(pmName)
    印刷(主任(下午))
    

    键入
    help(\uuuu import\uuuu)
    了解更多详细信息。

    将python文件从一个文件夹导入另一个文件夹的复杂方法不多。只需创建一个\uuuuu init\uuuuuu.py文件来声明此文件夹是一个python包,然后转到要导入的主机文件,只需键入


    从root.parent.folder.file导入变量、类,无论什么

    将python文件从一个文件夹导入到另一个文件夹,没有很多复杂的方法。只需创建一个\uuuuu init\uuuuuu.py文件来声明此文件夹是一个python包,然后转到要导入的主机文件,只需键入


    从root.parent.folder.file导入变量、类,无论什么

    要在“运行时”以已知名称导入特定Python文件:

    import os
    import sys
    


    要在“运行时”以已知名称导入特定Python文件,请执行以下操作:

    import os
    import sys
    

    有很多方法可以导入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\u does\u the\u fox\u say()

  • 示例2,在脚本中使用
    execfile
    或()执行另一个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。。。导入。。。功能:

  • 把这个放在/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?
    
    /main.py
    /mymodule
        /__init__.py
        /somefile.py
        /otherstuff.py
    
    . 
    ├── A.py 
    └── B.py
    
    .
    ├── B.py
    └── folder
         └── A.py
    
    如果您在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
    
    el@apollo:/home/el/foo5$ python main.py
    SkyCake evolves to stay just beyond the cognitive reach of the bulk 
    of men. SKYCAKE!!
    
    从其他目录导入外部文件中的所有内容

  • 示例5,使用
    os.system(“pythonyourfile.py”)

    import os
    os.system("python yourfile.py")
    
    示例6,通过搭载python startuphook导入文件:

    更新:这个例子曾经适用于python2和python2,但现在只适用于python2。python3摆脱了这个用户startuphook特性集,因为它被低技能的python库编写者滥用,在所有用户定义的程序之前,使用它不礼貌地将代码注入全局名称空间。如果你想让它在python3上发挥作用,你就必须更具创造性。如果我告诉你怎么做,python开发人员也会禁用该功能集,所以你只能靠自己了

    见:

    将此代码放入您的主目录
    ~/.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 )
    
        testString= "A string literal to import and test with"
    
    将此代码放入main.py(可以在任何地方):

    运行它,您应该得到以下结果:

    $ 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:没有名为“user”的模块
    ,则表示您正在使用python3,默认情况下会禁用StartupHook

    这项jist的功劳是:把你的船送上去

    示例7,最健壮:使用bare Import命令导入python中的文件:el@apollo:/home/el/foo5$ python main.py SkyCake evolves to stay just beyond the cognitive reach of the bulk of men. SKYCAKE!!
    import DoStuff.py as DS
    DS.main()
    
    from file import function_name  ######## Importing specific function
    function_name()                 ######## Calling function
    
    import file              ######## Importing whole package
    file.function1_name()    ######## Calling function
    file.function2_name()    ######## Calling function
    
    def display():
        print("I'm working sundar gsv")
    
    import helper
    helper.display()
    
    /main.py
    /mymodule
        /__init__.py
        /somefile.py
        /otherstuff.py
    
    from mymodule.somefile import somefunc
    from mymodule.otherstuff import otherfunc
    
        testString= "A string literal to import and test with"
    
        #!usr/bin/env python3
        Data=open('data.txt','r+').read()
    
        class ImportedFile:
    
        exec(data)
    
        data=ImportedFile()
    
    /path/to/common_dir/module/file.py
    /path/to/common_dir/application/app.py
    /path/to/common_dir/application/subpath/config.json
    
    import os, sys, inspect
    
    sys.path.append(os.getcwd())
    from module.file import MyClass
    instance = MyClass()
    
    # Get dirname from inspect module
    filename = inspect.getframeinfo(inspect.currentframe()).filename
    dirname = os.path.dirname(os.path.abspath(filename))
    MY_CONFIG = os.path.join(dirname, "subpath/config.json")
    
    user@host:/path/to/common_dir$ python3 application/app.py
    
    import os, importlib, sys
    
    def callfunc(myfile, myfunc, *args):
        pathname, filename = os.path.split(myfile)
        sys.path.append(os.path.abspath(pathname))
        modname = os.path.splitext(filename)[0]
        mymod = importlib.import_module(modname)
        result = getattr(mymod, myfunc)(*args)
        return result
    
    result = callfunc("pathto/myfile.py", "myfunc", arg1, arg2)
    
    library.zip
    |-library
    |--__init__.py
    
    def dummy():
        print 'Testing things out...'
    
    import sys
    sys.path.append(r'library.zip')
    
    import library
    
    def run():
        library.dummy()
    
    run()
    
    . 
    ├── A.py 
    └── B.py
    
    import A
    
    from A import *
    
    from A import THINGS_YOU_WANT_TO_IMPORT_IN_A
    
    .
    ├── B.py
    └── folder
         └── A.py
    
    import folder.A
    
    from folder.A import *
    
    from folder.A import THINGS_YOU_WANT_TO_IMPORT_IN_A
    
    %load_ext autoreload 
    %autoreload 2
    
    from y import * 
    
    $ python3 -m one
    __main__ imported (one.py)
    two imported (two.py)
    mymod imported (file.py)