访问相邻文件中的代码
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)
如果您必须使用当前的 目录 设计,我建议使用 sys
和 os
的组合来简化您的代码:
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
我在一个文件夹中有代码,并且想像这样在相邻文件夹中导入代码:
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)
如果您必须使用当前的 目录 设计,我建议使用 sys
和 os
的组合来简化您的代码:
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