Python——在同一个包中的模块中导入包
我有一个类似这样的项目结构Python——在同一个包中的模块中导入包,python,Python,我有一个类似这样的项目结构 /some_app build/ README out.py some_app/ __init__.py mod1.py mod2.py 现在,我想将一些应用程序包导入mod2,而不必使用sys.path技巧。我所做的只是 # mod2.py import some_app 现在,当我从命令行运行mod2.py时 some_app $ python mod2.py 它抛出错误Impo
/some_app
build/
README
out.py
some_app/
__init__.py
mod1.py
mod2.py
现在,我想将一些应用程序
包导入mod2
,而不必使用sys.path
技巧。我所做的只是
# mod2.py
import some_app
现在,当我从命令行运行mod2.py时
some_app $ python mod2.py
它抛出错误ImportError:没有名为some_app的模块
但是,在out.py
文件中,当我这样做时
# out.py
import some_app.mod2
然后呢
some_app $ python out.py
它运行得很好
因此,正在发生的事情是这样的。我将一个包加载到同一个包中的一个模块中,然后将该模块作为\uuuuu main\uuuuu
文件运行,但它不起作用。接下来,我在另一个模块中加载同一个模块(我作为\uuuuuu main\uuuuu
运行的模块),然后作为\uuuuuuu main\uuuu
运行另一个模块,它就可以工作了
有人能详细说明一下这是怎么回事吗
更新
我知道这样做没有直接的理由——因为我可以直接导入some_app
包中的任何模块。我之所以尝试这样做,是因为在Django项目中,这就是他们正在做的。看
在每个模块中,所有非标准导入都以django.
开头。所以我想知道他们为什么这么做,怎么做
更新2
相关链接
out.py
导入一些应用程序mod2,因为它与一些应用程序包位于同一目录中,Python解释器开始从该路径查找模块
mod2.py
中的导入错误是正常的,因为mod2.py
文件夹中没有some_app
包。mod2.py
是some_app
的一部分。因此,导入模块是没有意义的,因为您已经在模块中了
您仍然可以导入mod1
。我假设您需要一些\u app/\u init\u.py
才能运行。不确定这是否可能
编辑:
看起来像来自的。导入一些模块
将完成您想要的操作。看起来“from.import some\u module”只能在Python3中使用
通用的方法是在init.py中执行所有导入。如果您放置一些代码来澄清\uuuuuuu main\uuuuuuuuuu
的内容,这会有所帮助。不鼓励从中使用。导入*
。但是这确实从中得到了正确的答案。导入mod2
内部mod1.py
。看,我想我在这里指的是通配符,而不是字面语法。导入某些\u模块throwsimportorror:在Python 2.7中,无论是否使用absolute\u导入
Not true-from,都无法导入命名某些\u模块。import some_module
在Python2.7Ok,-3中工作得很好,但是最好的方法是在init.py中进行导入吗?