Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python——在同一个包中的模块中导入包_Python - Fatal编程技术网

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模块throws
importorror:在Python 2.7中,无论是否使用
absolute\u导入
Not true-
from,都无法导入命名某些\u模块。import some_module
在Python2.7Ok,-3中工作得很好,但是最好的方法是在init.py中进行导入吗?