__init__のないPythonパッケージ

flufl.enum
のPythonパッケージを pip install しました。通常のPythonパッケージとして
flufl/__ init __。py モジュールが欠落しています。見知らぬ人でさえこれです:

>>> import flufl
>>> flufl

foo/__ init __ と(おそらく) import foo
を使わないで、この foo/bar/__ init __。py の作成を再現しようとしました。
flufl はどうしますか?

ベストアンサー

魔法はflupl.enum-3.2-py2.7-nspkg.pthファイルで行われます。これはsite-packagesに
“pip install”で入れられます:

import sys,new,os
p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('flufl',))
ie = os.path.exists(os.path.join(p,'__init__.py'))
m = not ie and sys.modules.setdefault('flufl',new.module('flufl'))
mp = (m or []) and m.__dict__.setdefault('__path__',[])
(p not in mp) and mp.append(p)

pthファイルは起動時に評価されます。特に、このファイルは
“flufl”という名前の新しいモジュールを作成し、それをsys.modulesに格納します。それはなぜそれが「ビルトイン」として見えるのかを説明しています。

>>> import new
>>> new.module('foo')

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です