我有以下结构:
my_program/
main.py
packages/
__init.py__
my_package/
__init__.py
foo.py
my_other_package/
__init__.py
my_other_module.py
在IPython中,当我进入my_program/packages/my_package
并输入:
run -m foo.py
我收到警告:
WARNING: u'foo.py'is not a valid modulename on sys.path
我的问题是为什么?
看看execution.py IPython魔术,我看到了:
if "m" in opts:
modulename = opts["m"][0]
modpath = find_mod(modulename)
if modpath is None:
warn('%r is not a valid modulename on sys.path'%modulename)
return
arg_lst = [modpath] + arg_lst
但我不确定我理解为什么他们在modpath
None
时有if语句。
Here是find_mod
的规范:
如果我尝试run -m foo
(即我放弃.py
扩展名),我会得到以下内容:
ValueError: Attempted relative import in non-package
错误发生在foo.py
中的这一行:
from ..my_other_package import my_other_module
答案 0 :(得分:0)
只是在玩游戏时,尝试run -m foo