从PYTHONPATH下的嵌套目录访问文件

时间:2016-02-25 04:50:17

标签: python python-2.7 import importerror pythonpath

我已经检查了很多SO问题,但没有帮助我解决我的问题。 我有一个文件夹结构:

|--test/foo.py
|--library/   #This is set as my PYTHONPATH
|--|--file1.py
|--|--folder1
|--|--|--util.py

我正在尝试从util.py访问foo.py

注意:此时我可以从test文件夹访问库下的所有文件。但每当我尝试访问library / folder1 / util.py时,它都会显示错误"ImportError: No module named util"

到目前为止我已经尝试过这个:
foo.py

 import os
 import sys
 import file1
 sys.path.insert(0, '/folder1/')
 import util
 util.function_name
 #do something 

这种方法有效,但后来我无法使用" library / file1.py"。 有没有更清洁的方法来避免这种情况?

注意:这些只是文件夹结构(我维护区分文件),而不是模块,(所以我相信我不能使用__init__.py和导入utils.functionname之类的东西)

2 个答案:

答案 0 :(得分:0)

更改您的文件夹结构,使library成为一个完整的包,如下所示:

|--test/foo.py
|--library/
|--|--__init__.py
|--|--file1.py
|--|--folder1/
|--|--|--__init__.py
|--|--|--util.py

然后,在foo.py

import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))
# you should now be able to import the following things:
from library import file1
from library.folder1 import util

答案 1 :(得分:0)

如果要对其进行暴力破解,请从顶级目录(在本例中为包含test/library/的未命名目录中运行):

export PYTHONPATH=$(myarray=($(find "$(pwd -P)" -type d)) \
  && printf '%s\n' "$(IFS=:; printf '%s' "${myarray[*]}")")

这会将您的顶级目录和每个子目录添加到python路径。别胡扯了。