从兄弟文件夹导入python

时间:2018-02-08 16:59:03

标签: python

我正在尝试从兄弟文件夹中的python文件导入模块。我在这里阅读了几个类似的问题,并尝试应用那里列出的解决方案,但我无法解决问题。

结构如下:

parentfolder/gfolder/codefolder/fileA.py
parentfolder/gfolder/utilfolder/util.py

gfoldercodefolderutilfolder都有__init__.py

我试图在fileA.py中执行操作:

import gfolder.utilfolder.util as util

我也尝试在import语句之前添加:

sys.path.append(".../parentfolder/")

这也不起作用:

import gfolder.utilfolder.util as util
ModuleNotFoundError: No module named 'gfolder'

a similar question中的解决方案表示将__init.py__包含在我已有的目录中。

修改: 现在sys.appendsys.insert都工作了,问题是我在路径的末尾加了一个斜杠。当我把它拿出来时,一切都运转了。

2 个答案:

答案 0 :(得分:2)

首先,让我来描述 Python模块和&之间的区别。一个 Python包,以便我们俩都在同一页面上。 ✌

模块是单个.py文件(或多个文件),它们在一个导入下导入并使用。 ✔

import aModuleName # Here 'aModuleName' is just a regular .py file.

然而,包是给出包层次结构的目录中的模块集合。包中包含不同的 __init__.py 文件。 ✔

from aPackageName import aModuleName # Here 'aPackageName` is a folder with a `__init__.py` file # and 'aModuleName', which is just a regular .py file.

因此,当我们有一个名为 proj-dir 的项目目录时,⤵

proj-dir --|--__init__.py --package1 --|--__init__.py --|--module1.py --package2 --|--__init__.py --|--module2.py

  

请注意,我还在 proj-dir 本身添加了一个空的 __init__.py ,这也使它成为一个包。

现在,如果要将 package2 module2 中的任何python对象导入 package1 module1 ,然后 module1.py 文件中的导入语句将

from proj-dir.package2.module2 import object2 # if you were to import the entire module2 then, from proj-dir.package2 import module2

我希望这个简单的解释能够澄清你对Python导入机制的怀疑。

答案 1 :(得分:1)

正如Andrew Cox回答了以下帖子Import a module from a relative path

您可以将子目录添加到Python路径中,以便将其作为普通脚本导入

import sys
sys.path.insert(0, <path to gfolder>)
import gfolder

你也可以将目录添加到Linux系统的PATH var中(我在处理项目时使用它,最后我将PATH修改为它的原始值)

如果你保持以下结构而不是在框边

parentfolder/gfolder/codefolder/fileA.py
parentfolder/gfolder/utilfolder/util.py
parentfolder/gfolder/main.py

运行main.py