我在以下树结构中有两个文件
├── __init__.py
├── pkg
│ ├── __init__.py
│ └── child.py
└── top.py
top.py文件看起来像这样
variable = "I live in the top directory"
child.py看起来像这样
from ..top import variable
if __name__ == '__main__':
print variable
如果我尝试通过python pkg/child.py
运行该文件,则会收到错误消息:ValueError: Attempted relative import in non-package
。如果从pkg
目录以python child.py
运行它,我会收到同样的错误。
阅读本回答中提供的答案:
How to do relative imports in Python?我尝试从父目录中执行python -m pkg.child
。然后我收到错误:ValueError: Attempted relative import beyond toplevel package
。
所以我开始没有想法了。你应该怎么做?
答案 0 :(得分:2)
您可以将top
包的相对路径附加到child.py
中的搜索路径:
import sys
sys.path.append('../')
from top import variable
if __name__ == '__main__':
print variable
答案 1 :(得分:2)
假设包含top.py
的目录名为foo
。
然后更改当前的工作目录to the parent of foo
,以便该目录将包含在sys.path
。
cd /path/to/parent/of/foo
然后将child.py
作为模块运行:
python -m foo.pkg.child
产量
I live in the top directory
cd /path/to/foo
python -m pkg.child
不起作用,因为相对导入
from ..top import variable
是指foo
,包是child.py之上的两个目录。 foo
是
如果您坐在目录 foo
并运行python -m pkg.child
,则无法识别为包。
答案 2 :(得分:0)
使用os
模块怎么样?我在child.py
import os
dir_path = os.path.dirname(os.path.abspath(os.curdir))
os.chdir(dir_path)
from top import variable
if __name__ == '__main__':
print variable