Python3在Windows上忽略__init__.py,但在OS X中不忽略



我有一个名为parser的包(它隐藏了一个内置模块parser),我正在导入它:

import parser

这适用于OS X,但不适用于Windows。我已经检查了我的parser包的__init__.py在OS X中是否正确执行。但是,它在Windows中不起作用。这就是我在OSX:中得到的

>>> import parser, sys
>>> print(parser)
<module 'parser' from '/Users/apple/Development/tiny-py-interpreter/tinypy/parser/__init__.py'>
>>> for path in sys.path: print(path)
...
/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python35.zip
/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5
/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin
/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload
/usr/local/lib/python3.5/site-packages

我在Windows中得到的:

>>> import parser
>>> parser
<module 'parser' (built-in)>
>>  for path in sys.path: print(path)
...
C:WindowsSYSTEM32python34.zip
C:StuffPython34DLLs
C:StuffPython34lib
C:StuffPython34
C:StuffPython34libsite-packages

parser重命名为其他名称可使其在Windows中工作。这两个系统都有普通的python3设置。

目录结构如下:

main.py 
parser
|--- __init__.py

这是一种正确的行为吗?为什么它没有在OS X中发生,而在Windows中发生?

为了使阴影工作,用户目录必须位于stdlib目录之前。这取决于O/S和特定的Python环境(conda?stock?enthout?等),可能会发生也可能不会发生。

相关内容

最新更新