Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中import语句的范围是多少_Python - Fatal编程技术网

Python中import语句的范围是多少

Python中import语句的范围是多少,python,Python,关于Python中import语句的范围,我得到了不同的答案。我对Stackoverflow做了一些研究,看看大家对这个话题有什么看法。因此,如果有人想从当前工作目录导入python模块,即扩展名为.py的文件,那么应该没有问题。但是,如果有人想从不同的目录导入.py文件,那么在我看来有两个答案是相互冲突的(可能是因为我没有完全理解,但我正在努力理解): 首先,这个答案是“不能从python中的不同文件夹或目录导入文件” 第二,这个答案是“我们可以” 有人能给我解释一下区别是什么吗?粗略地说,第

关于Python中import语句的范围,我得到了不同的答案。我对Stackoverflow做了一些研究,看看大家对这个话题有什么看法。因此,如果有人想从当前工作目录导入python模块,即扩展名为.py的文件,那么应该没有问题。但是,如果有人想从不同的目录导入.py文件,那么在我看来有两个答案是相互冲突的(可能是因为我没有完全理解,但我正在努力理解):

首先,这个答案是“不能从python中的不同文件夹或目录导入文件”

第二,这个答案是“我们可以”


有人能给我解释一下区别是什么吗?

粗略地说,第一个示例说明不能使用
import
语句从磁盘上的指定位置导入。第二个示例说明,通过使用
imp
模块(提供对导入系统内部的访问),可以实现类似的效果。因此,您不能“真正”导入这样一个模块(从某种意义上说,您不能使用
import
来实现),但您可以使用
imp
模块“使其工作”

因此,如果您的问题是关于
import
语句的,那么不,您不能(没有黑客,请参见下文);如果您的问题是“加载模块”(不必使用
import
station),那么可以。这有点像说“你能打开这扇门吗?不,因为你没有钥匙。你能打开这扇门吗?是的,用大锤把它砸进去。”

另外,请注意,即使是第一个例子也提供了一种方法,这只是一个丑陋的黑客


实际上,真正的问题是为什么你觉得你需要这样做。它很少是必要的,通常意味着您正在创建一个不必要的复杂库结构。

这两个答案都是正确的。第一个使用直接的
import
语句,实际上,您不能以这种方式从另一个文件夹导入

第一个将路径附加到
sys.path
,这是python在导入模块时搜索的目录列表。第二个不是使用
import
语句,而是使用工作方式不同的
imp.load\u source


您通常希望将所有文件放在同一个文件中,或者在更高的文件夹层次结构中创建一个脚本,以导入所有需要的文件。

在Python中导入非常简单:

  • 只能通过引用模块(而不是路径)进行导入
  • Python按以下顺序搜索可以导入的内容:
  • 从执行脚本的目录
  • 来自
    PYTHONPATH
    环境变量(如果已设置)中的目录
  • 从系统范围Python安装的模块目录
  • 它接受这三件事,构建
    sys.path
    列表,并按列出的顺序进行搜索。这有一些基本问题。例如,如果您有一个包含以下文件的目录:

    foo.py
    math.py
    
    foo.py
    中,如果您说
    import math
    ,它将从
    math.py
    导入内容,而不是从Python附带的全局
    math
    库导入内容。这是因为首先在当前目录中搜索模块

    要从不在Python搜索的三个位置的文件系统路径导入和使用模块,需要在执行任何导入之前将其添加到
    sys.path
    变量中:

    import sys
    sys.path.insert(0, '/some/directory/')
    from somemodule import something
    
    理解这一点:

    导入文件时,Python只搜索当前目录, 运行入口点脚本的目录,以及 sys.path,其中包括包安装等位置 目录

    :引用自
    现在让我们假设您拥有以下文件:

    I) application/app/folder/file.py
    II) application/app2/some_folder/some_file.py
    
    您希望将函数从某个_file.py导入file.py。当您从application.app.folder.file import func_name执行
    操作时,python会尝试解析路径
    application.app.folder.file
    。它搜索当前目录中是否有名为
    application
    的包/模块,即
    application/app/folder/
    中的file.py和
    sys.path
    中的目录路径;python无法在任何标准搜索路径中找到
    应用程序
    。因此,默认情况下,您不能从其他不在python路径中的文件夹导入路径,您可以告诉python您的自定义搜索路径。您可以通过将路径添加到python路径(
    sys.path
    )来实现这一点

    如果要导入知道其绝对/完整路径(如中所示)的文件,请按

    import imp
    
    foo = imp.load_source('module.name', '/path/to/file.py')
    foo.MyClass()
    
    默认情况下,它会在第一个答案中显示。
    import imp
    
    foo = imp.load_source('module.name', '/path/to/file.py')
    foo.MyClass()