我有以下结构:
my_program/
main.py
packages/
__init.py__
my_package/
__init__.py
foo.py
my_other_package/
__init__.py
my_other_module.py
在 IPython 中,当我 cd intomy_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
但我不确定我理解为什么他们有 if 声明 when modpath
is None
。
这是规格find_mod
:
更新:
如果我尝试run -m foo
(即我放弃.py
扩展名),我会得到以下信息:
ValueError: Attempted relative import in non-package
错误发生在以下行中foo.py
:
from ..my_other_package import my_other_module