如何在python中从更高级别的目录导入?
例如,我有:
/var/www/PROJECT/subproject/_common.py
/var/www/PROJECT/subproject/stuff/routes.py
我想将A
中的变量_common.py
导入到routes.py
# routes.py
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from _common import A
但是我得到了错误:
ImportError:cannot import name 'A'
答案 0 :(得分:0)
旧版本
要解决此问题,请将".."
替换为os.pardir
:
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)))
from _common import A
新版本
上面的代码不能解决问题,因为真正的问题在于项目结构而不是特定的行。问题是循环导入。提供完整的追溯后,问题变得很明显。这是重现此问题的简单方法-考虑3个文件...
main.py:
import a
a.py:
import b
A = 'A'
b.py:
from a import A
...错误是:
ImportError: cannot import name 'A'
OR
b.py:
import a
BB = a.A
...错误是:
AttributeError: module 'a' has no attribute 'A'
这个问题的解决方案已经讨论了很多次-search on SO
答案 1 :(得分:0)
更改文件目录:
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),"../../project")))
from _common import A