Python: "import" 更喜欢模块还是包?
假设在当前文件夹里有一个叫做 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 进行了相同的测试,结果也是一样的。