Python:“导入”更喜欢什么 - 模块或包?

时间:2011-05-18 19:10:44

标签: python module package python-import operator-precedence

假设在当前目录中有一个名为somecode.py的文件,以及一个名为somecode的目录,其中包含__init__.py文件。现在我从这个执行import somecode的目录运行一些其他Python脚本。将导入哪个文件 - somecode.pysomecode/__init__.py

是否有一个定义且可靠的搜索顺序可以解决这个问题?

哦,有没有人提到这种行为的官方文档? : - )

2 个答案:

答案 0 :(得分:12)

将在模块之前导入包。所示:

% 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执行了此操作,并获得了相同的结果。

答案 1 :(得分:0)

使用以下目录在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”

因此,这些系统似乎是一致的,首先加载包。