3
考慮下面的例子包:相對導入失敗
example/
├── bar.py
├── foo.py
└── __init__.py
foo.py
只包含一個行代碼:from . import bar
。
如果我從example
包根內執行python foo.py
,我得到:
SystemError: Parent module '' not loaded, cannot perform relative import
我在做什麼錯?
謝謝!它似乎工作,你能解釋一下你的評論:「它不應該在頂層運行任何代碼,通常」?你指的是'foo.py',你的意思是'foo.py'模塊在剛導入時不應該運行任何代碼? –
@DunPeal:是的,確切地說。 – Ryan
更具體地說:當你運行一個文件爲'python a/b/c.py'時,python將'a/b /'加入'sys.path'。不要運行任何應該作爲模塊層次結構的一部分的文件名。總是坐在父目錄下並用'-m'運行它。 (如果你真的想這麼做,你可以在這裏使用'-m example.foo'。) – Eevee