1

我有以下结构:

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 modpathis None

是规格find_mod

在此处输入图像描述

更新:

如果我尝试run -m foo(即我放弃.py扩展名),我会得到以下信息:

ValueError: Attempted relative import in non-package

错误发生在以下行中foo.py

from ..my_other_package import my_other_module
4

1 回答 1

0

刚从玩,试着做run -m foo

于 2013-07-16T20:55:55.403 回答