Python,从父目录导入模
我想知道如何导入一级以上的文件。 我在谷歌上看到:Python,从父目录导入模,python,import,module,Python,Import,Module,我想知道如何导入一级以上的文件。 我在谷歌上看到: >>> sys.path.append("../") 但我不喜欢它,我希望有更好的解决方案另一种选择,如果您正在编写的是软件包的一部分,则使用相对导入,如下所示: from .. import foo 其中foo是您尝试导入的模块的名称 同样,如果当前目录中有另一个模块,则可以使用: from . import bar 可悲的是(或者也许不是那么可悲),然而,这并没有延伸到更进一步。你不能向祖父母或更高级别的人求助 编辑
>>> sys.path.append("../")
但我不喜欢它,我希望有更好的解决方案另一种选择,如果您正在编写的是软件包的一部分,则使用相对导入,如下所示:
from .. import foo
其中foo
是您尝试导入的模块的名称
同样,如果当前目录中有另一个模块,则可以使用:
from . import bar
可悲的是(或者也许不是那么可悲),然而,这并没有延伸到更进一步。你不能向祖父母或更高级别的人求助 编辑: 正如联合申诉委员会优雅地指出的那样,我最后的评论是不正确的: 从…系统导入路径 请注意,虽然最后一个案例是合法的,但它肯定是不被鼓励的(“疯狂”是Guido一词)
我一定把圭多对它的描述内化得太多了 编辑: 好的,我刚刚在2.7中验证了这一点-这显然是你喜欢的深度,并且取决于
from .... import greatgrandparent
工作得很好。我想我需要另一个选择,如果你写的是一个包的一部分,那就是像这样使用相对导入:
from .. import foo
其中foo
是您尝试导入的模块的名称
同样,如果当前目录中有另一个模块,则可以使用:
from . import bar
可悲的是(或者也许不是那么可悲),然而,这并没有延伸到更进一步。你不能向祖父母或更高级别的人求助 编辑: 正如联合申诉委员会优雅地指出的那样,我最后的评论是不正确的: 从…系统导入路径 请注意,虽然最后一个案例是合法的,但它肯定是不被鼓励的(“疯狂”是Guido一词)
我一定把圭多对它的描述内化得太多了 编辑: 好的,我刚刚在2.7中验证了这一点-这显然是你喜欢的深度,并且取决于
from .... import greatgrandparent
工作得很好。我想我需要根据项目的组织方式,您可以正常导入它。假设您的项目结构如下所示:
/tmp/test_prj/launcher.py
/tmp/test_prj/mymodule/__init__.py
/tmp/test_prj/mymodule/helper.py
/tmp/test_prj/mymodule/mysubmodule/__init__.py
如果您使用启动器(launcher.py,本例中为launcher.py
),并且始终使用/launcher.py
调用项目,则可以使用以下行导入helper.py
内部mysubmodule
:
from mymodule import helper
这是因为您当前的工作目录是/tmp/test\u prj
。您可以使用打印系统路径检查它,它应该是第一个
如果我不够清楚,请告诉我:D根据项目的组织方式,您可以正常导入项目。假设您的项目结构如下所示:
/tmp/test_prj/launcher.py
/tmp/test_prj/mymodule/__init__.py
/tmp/test_prj/mymodule/helper.py
/tmp/test_prj/mymodule/mysubmodule/__init__.py
如果您使用启动器(launcher.py,本例中为launcher.py
),并且始终使用/launcher.py
调用项目,则可以使用以下行导入helper.py
内部mysubmodule
:
from mymodule import helper
这是因为您当前的工作目录是/tmp/test\u prj
。您可以使用打印系统路径检查它,它应该是第一个
如果我不够清楚,请告诉我:D这就是文件系统的工作方式。这就是文件系统的工作方式。“你不能向祖父母或更高级别的人求助。”PEP 328似乎暗示着你可以。我刚刚确认您可以(至少在Python3中;它不应该与Python2有什么区别,因为这个相对导入语法是在第一个版本中实现的)。“我一定把Guido对它的描述内部化了太多。^”Guido的描述不是指使用相对导入语法从标准Python模块导入项吗?(我的意思是,如果只从内置Python模块中进行相对导入来获取某些内容,这将是非常愚蠢的,因为对这些模块进行绝对导入更合理。)你能看看我的笑话给我带来的麻烦吗?我想我只是读得太快了。还有谁能从……确认这一点。。。。导入曾祖父母
有效吗?我想摆脱这种东西sys.path.append(os.path.abspath(os.path.join('..','..','..','..'))
“你不能上祖父母或更高的级别。”PEP 328似乎暗示你可以。我刚刚确认您可以(至少在Python3中;它不应该与Python2有什么区别,因为这个相对导入语法是在第一个版本中实现的)。“我一定把Guido对它的描述内部化了太多。^”Guido的描述不是指使用相对导入语法从标准Python模块导入项吗?(我的意思是,如果只从内置Python模块中进行相对导入来获取某些内容,这将是非常愚蠢的,因为对这些模块进行绝对导入更合理。)你能看看我的笑话给我带来的麻烦吗?我想我只是读得太快了。还有谁能从……确认这一点。。。。导入曾祖父母
有效吗?我想摆脱这种东西sys.path.append(os.path.abspath(os.path.join('..','..','..','..'))
。