访问相邻文件中的代码

Accessing code in adjacent files

我在一个文件夹中有代码,并且想像这样在相邻文件夹中导入代码:

I am trying to import a python file in innerLayer2, into a file in innerLayer1
outerLayer:
           innerLayer1
                      main.py
           innerLayer2 
                      functions.py

我创建了以下函数来解决我的问题,但一定有更简单的方法吗?这也只适用于 windows,我需要它同时适用于 linux 和 windows。

# main.py
import sys    
def goBackToFile(layerBackName, otherFile):
        for path in sys.path:
            titles = path.split('\')
            for index, name in enumerate(titles):
                if name == layerBackName:
                    finalPath = '\'.join(titles[:index+1])
                    return finalPath + '\' + otherFile if otherFile != False else finalPath


    sys.path.append(goBackToFile('outerLayer','innerLayer2'))
    import functions

是否有更简单的方法适用于所有操作系统?

编辑:我知道最简单的方法是将 innerLayer2 放在 innerLayer1 中,但在这种情况下我不能这样做。文件必须相邻。

编辑:在分析收到的答案后,我发现了最简单的方法并将其作为答案发布在下方。谢谢您的帮助。

最简单的方法是:

innerLayer2 文件夹移动到 innerLayer1 文件夹内
innerLayer2
上添加一个名为 __init__.py 的空文件 在 main.py 上使用以下内容:

 import innerLayer2.functions as innerLayer2
 # Eg of usage:
 # innerLayer2.sum(1, 2)

如果您必须使用当前的 目录 设计,我建议使用 sysos 的组合来简化您的代码:

import sys, os
sys.path.insert(1, os.path.join(sys.path[0], '..'))
from innerLayer2 import functions

使用 ... 在包结构内寻址,如 PEP 328 等人所指定

假设您有以下结构:

proj/
     script.py       # supposed to be installed in bin folder
     mypackage/      # supposed to be installed in sitelib folder
         __init__.py # defines default exports if any
         Inner1/
             __init__.py    # defines default exports from Inner1 if any
             main.py
         Inner2/
             __init__.py    # defines default exports from Inner2 if any
             functions.py

Inner1.main 应该包含这样的导入字符串:

from ..Inner2 import functions

分析我收到的答案后,我发现了最简单的解决方案:只需使用此语法将 outerLayer 目录添加到 sys.path,然后从 innerLayer2 导入函数:

# main.py
import sys
sys.path.append('..') # adds outerLayer to the sys.path (one layer up)
from innerLayer2 import functions