我有一个项目,我想使用一些位于其他目录中的python类。
示例结构:
/dir
+../subdirA
+../subdirB
+../mydir
绝对路径不同,因为此项目在不同的计算机上运行。
当执行位于/my dir中的带有MySampleClass的python文件时,如何导入位于/dir中的OtherClassRoot或位于/subdir中的OtherClassA?
我尝试过这样的事情:
from . import MySampleClass as msc
或者
from ../ import MySampleClass as msc
但这总是失败或给我错误消息,比如试图在非包中进行相对导入
那么,相对导入python文件的正确方法是什么?
在mydir目录中需要一个
__init__.py
(可以是空的),然后只要dir在sys路径中,假设MySampleClass在myfile.py中,myfile.py在mydir中如果要将顶级函数从subdirA中名为util.py的文件导入myfile.py(类所在的位置),则
__init__.py
必须在subdirA中,然后在myfile.py中sys路径也是如此,即必须从'dir'开始或添加它。所有内容都是从包的顶层(通常是项目文件夹)导入的。
但是,对于模块测试,在解释器中可以从util运行函数,如果从subdirA开始,则需要将dir添加到sys路径,以便可以解析导入。
但这是一个黑客,最好在测试时只使用交互式解释器。您还可以将“dir”添加到pth文件中的站点包中。
要使用相对导入,您需要一个更深层次的嵌套文件夹,如subdirA/subdirofA,然后在subdirofA中可以使用。退出(比如
from .subdirB
)。实际上,对我来说,相对进口有点难以看到效用。对于我来说,最好使用直接导入相对于项目目录,但是如果您想要嵌套一个天真的子包,我可以看到它们是有用的,但是,如果可能的话,还是显式比隐式更好。另见this
在dir结构上,如下所示:
结合linux命令
ln
,我们可以使事情简单得多:现在,如果要将
some_stuff
从文件dir/subdirA/fileA.py
导入到文件dir/mydir/myfile.py
,只需像这样导入:“dir/subdir”也是如此
而且,这对
setup.py
进程有效,:)首先将相对路径添加到pythonpath
然后导入模块。
相关问题 更多 >
编程相关推荐