これが、Python2 の複雑なインポート メカニズムを理解していない単純なケースであることを願っています。私は次の設定をしています:
$> ls -ltr pypackage1
total 3
-rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 io.py
-rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 __init__.py
-rw-r--r-- 1 pelson pelson 57 Aug 17 19:22 code.py
$> cat pypackage1/code.py
from __future__ import absolute_import
import zipfile
__init__.py
つまり、空のandio.py
と 2 行のcode.py
ファイルを含むスタブ パッケージしかありません。
インポートできますpypackage1
:
$> python -c "import pypackage1.code"
しかし、code.py
ファイルを実行できません:
$> python pypackage1/code.py
Traceback (most recent call last):
File "pypackage1/code.py", line 3, in <module>
import zipfile
File "python2.7/zipfile.py", line 462, in <module>
class ZipExtFile(io.BufferedIOBase):
AttributeError: 'module' object has no attribute 'BufferedIOBase'
明らかに問題は、zipfile
モジュールが組み込みモジュールよりも相対的な io モジュールを選択することに関係していますが、私はそれを修正したio
と思いました。from __future__ import absolute_import
助けてくれてありがとう、