Python导入相对路径

丹尼尔451

我有一个项目,我想使用其他目录中的一些python类。

示例结构:

/dir
 +../subdirA
 +../subdirB
 +../mydir

绝对路径有所不同,因为此项目在不同的计算机上运行。

当我的蟒蛇文件MySampleClass位于/ mydir的执行,如何导入OtherClassRoot位于/目录OtherClassA位于/ subdirA

我尝试过类似的事情:

from . import MySampleClass as msc

要么

from ../ import MySampleClass as msc

但这总是失败或给我错误消息,例如尝试非包中的相对导入

那么,什么是相对导入python文件的正确方法呢?

威姆伍德

您将需要__init__.py在mydir目录中(它可以为空),然后只要dir在sys路径中,就假定MySampleClass在myfile.py中,而myfile.py在mydir中

from mydir.myfile import MySampleClass

如果要将顶级函数从驻留在subdirA中的名为util.py的文件导入myfile.py(您的类所在的位置),则__init__.py必须在subdirA中,然后在myfile.py中

from subdirA.util import somefunc, someotherfunc

sys路径也是如此,也就是说,您必须从'dir'开始或添加它。一切都从软件包的顶层(通常是项目文件夹)导入。

但是,对于模块测试,如果您从subdirA开始,则可能需要在解释器中的util中运行函数,如果需要从subdirA开始,则需要将dir添加到sys路径中,以便导入可以解析。

>>> import sys
>>> sys.path.append('../dir')

但这是一个技巧,最好仅在测试时从交互式解释器中使用。您还可以在pth文件的站点包中添加“ dir”。

要使用相对导入,您需要一个更深的嵌套文件夹,例如subdirA / subdirofA,然后在subdirofA中可以使用。退出(如from .subdirB)。确实,对我而言,相对进口很难看出该实用程序。对我来说,最好使用相对于项目目录的直接导入,但是如果您想嵌套一个幼稚的子程序包,我会发现它们很有用,但是如果可能的话,仍然要比隐式更好。

也看到这个

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章