我的目录结构如下:
mycode
|
└-----dirA
| └─---- fileA.py
└─----dirB
└─---- fileB.py
我该如何从文件A.py中导入fileB.object?我已经在所有文件夹中都包含了__init__.py文件,包括“mycode”,但我仍然不断收到错误消息,无法从文件A.py中找到fileB.py,并且相对导入也无效。
在Python中,有一种独特的方法可以向后遍历树:
.
表示同一目录..
表示父目录尝试使用:
from ..dirB.fileB import <symbol>
mycode
在Python中已知为一个包,否则这将不起作用。导入系统并不混乱,只是您有脚本可执行路径和模块路径(就像操作系统中的LIB路径一样)。 - tdelaneymycode
的_parent directory_在sys.path
中的某个位置即可。Python将扫描sys.path中的所有目录以查找包名称。但这引发了第二个问题,mypath
必须已经在某个地方被导入过了。顶层脚本(不在包中)或其他模块需要导入它。 - tdelaney您可以使用sys.path.insert()
方法:
import sys
sys.path.insert(0, './subdirectory')
import myfile
你可以在这里阅读更多相关信息。
sys.path.insert
和sys.path.append
之间有区别。由于Python将加载第一个模块并忽略其余模块,因此问题中的OP模块需要插入到sys.path
的第一个位置(在这种情况下为索引0),而不是像append
一样将给定路径添加到sys.path
列表的末尾,这可能不是他们正在寻找的或者对他们没有起作用。 - Archeologistappend
和insert
的作用是完全相同的。我认为这里问题的本质不在于冲突,而在于一个脚本能否访问第二个脚本。 - Daniel Trugmansys.path
中 - 最好通过安装模块来实现。除非您有多个同名包,否则其在路径中的位置并不重要。而这本身就是一个问题。 - tdelaney
import sys print(sys.path)
。这将提供一些关于当前系统路径中有哪些文件夹的想法。 - NandhafilaA.py
如何执行是无法回答这个问题的。您是否在dirA
目录下并且作为脚本运行(例如python3 fileA.py
)?是否有其他脚本import mycode.dirA.fileA
?在任一情况下,mycode
的父级需要在sys.path
中。通常的解决方法是使包可安装,然后安装它。有一些技巧(黑科技)可绕过此问题,但安装是正常的解决方案。 - tdelaney