Python: "import" 更喜欢模块还是包?

15 投票
2 回答
548 浏览
提问于 2025-04-16 17:54

假设在当前文件夹里有一个叫做 somecode.py 的文件,还有一个叫做 somecode 的文件夹,里面有一个 __init__.py 文件。现在我从这个文件夹里运行另一个 Python 脚本,执行 import somecode。那么,究竟会导入哪个文件呢?是 somecode.py 还是 somecode/__init__.py 呢?

这个问题有没有一个明确且可靠的顺序来解决呢?

哦,还有人能提供这个行为的官方文档参考吗?:-)

2 个回答

-1

在Windows 10(Python版本3.5)和Ubuntu Linux(Python版本2.7和3.5)上进行了测试,使用的目录如下:

https://github.com/alphaCTzo7G/stackexchange/tree/master/python/order_import_module_vs_package

结果

每次模块被加载时,都会打印出以下信息:

"你已经导入了foo/init.py"

所以在这些系统上,似乎都是先加载这个包。

11

在导入模块之前,包会先被导入。下面是一个示例:

% tree .
.
|-- foo
|   |-- __init__.py
|   `-- __init__.pyc
`-- foo.py

foo.py:

% cat foo.py 
print 'you have imported foo.py'

foo/__init__.py:

% cat foo/__init__.py
print 'you have imported foo/__init__.py'

还有在交互式解释器中的表现:

>>> import foo
you have imported foo/__init__.py

我不知道这个内容在哪里有官方的说明。

根据评论的编辑:这是在 Mac OS X 10.6.7 上使用 Python 2.7 进行的。我也在 Ubuntu 10.10 上使用 Python 2.6.5 进行了相同的测试,结果也是一样的。

撰写回答