我在一个文件夹中有代码,并希望导入相邻文件夹中的代码,如下所示:
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中,但在这种情况下我不能这样做。文件必须相邻。
编辑:在分析了已收到的答案后,我发现了最简单的方法并将其作为答案发布在下面。谢谢您的帮助。
答案 0 :(得分:2)
使用.
和..
来解决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
答案 1 :(得分:1)
如果您必须使用当前的目录设计,我建议您使用sys
和os
的组合来简化您的代码:
import sys, os
sys.path.insert(1, os.path.join(sys.path[0], '..'))
from innerLayer2 import functions
答案 2 :(得分:1)
在分析了我收到的答案后,我发现了最简单的解决方案:只需使用此语法将outerLayer目录添加到sys.path然后从innerLayer2导入函数:
# main.py
import sys
sys.path.append('..') # adds outerLayer to the sys.path (one layer up)
from innerLayer2 import functions
答案 3 :(得分:0)
最简单的方法是:
将innerLayer2
文件夹移至innerLayer1
文件夹中
在__init__.py
上添加名为innerLayer2
的空文件
在main.py
上使用以下内容:
import innerLayer2.functions as innerLayer2
# Eg of usage:
# innerLayer2.sum(1, 2)