Python中import语句的范围是多少
关于Python中import语句的范围,我得到了不同的答案。我对Stackoverflow做了一些研究,看看大家对这个话题有什么看法。因此,如果有人想从当前工作目录导入python模块,即扩展名为.py的文件,那么应该没有问题。但是,如果有人想从不同的目录导入.py文件,那么在我看来有两个答案是相互冲突的(可能是因为我没有完全理解,但我正在努力理解): 首先,这个答案是“不能从python中的不同文件夹或目录导入文件” 第二,这个答案是“我们可以”Python中import语句的范围是多少,python,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中导入非常简单:
PYTHONPATH
环境变量(如果已设置)中的目录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()