假设在当前目录中有一个名为somecode.py
的文件,以及一个名为somecode
的目录,其中包含__init__.py
文件。现在我从这个执行import somecode
的目录运行一些其他Python脚本。将导入哪个文件 - somecode.py
或somecode/__init__.py
?
是否有一个定义且可靠的搜索顺序可以解决这个问题?
哦,有没有人提到这种行为的官方文档? : - )
答案 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”
因此,这些系统似乎是一致的,首先加载包。