我已经检查了很多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
之类的东西)
答案 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路径。别胡扯了。