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

标签 python module package python-import operator-precedence

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

是否有解决此问题的明确且可靠的搜索顺序?

哦,有没有人引用过此行为的官方文档? :-)

最佳答案

包将在模块之前导入。图解:

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

关于Python: "import"更喜欢什么——模块还是包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049825/

相关文章:

Python 用户输入列出分隔值

oracle - 在协作的,版本控制的环境中,您如何处理Oracle软件包?

java - 使库的方法对外部访问不可见但对库可见

Python 运行时错误 : dictionary changed size during iteration

python - 加载和读取 JSON 文件的正确方法包含 Python 中的特殊字符

module - 如何在 Julia 中本地扩展 Base 运算符(在模块中)

ruby-on-rails - 类变量和模块包含,特别是在 ActionController 中

node.js - package.json 中的依赖是什么 - nodejs

Python列表理解和 'not in'

angular - 我如何检查或证明 angular2 中的模块是延迟加载的?