我有一个项目,我想使用其他目录中的一些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] 删除。
我来说两句