モジュールがあるとしましょうfoo.py
とパッケージfoo/
。私が電話したら
import foo
どれがロードされますか?モジュールまたはパッケージをロードするために杖を指定するにはどうすればよいですか?
パッケージは常に読み込まれると思います。私の知る限り、これを回避することはできません。したがって、パッケージ名またはモジュール名を変更します。ドキュメント: http://docs.python.org/tutorial/modules.html#the-module-search-path
実際、それは可能です(このコードは十分にテストされていませんが、機能しているようです)。
ファイルfoo.py
print "foo module loaded"
ファイルfoo/__init__.py
print "foo package loaded"
ファイルtest1.py
import foo
ファイルtest2.py
import os, imp
def import_module(dir, name):
""" load a module (not a package) with a given name
from the specified directory
"""
for description in imp.get_suffixes():
(suffix, mode, type) = description
if not suffix.startswith('.py'): continue
abs_path = os.path.join(dir, name + suffix)
if not os.path.exists(abs_path): continue
fh = open(abs_path)
return imp.load_module(name, fh, abs_path, (description))
import_module('.', 'foo')
ランニング
$ python test1.py
foo package loaded
$ python test2.py
foo module loaded
たぶん、あなたはあなたのクラスをfoo.py
モジュールから__init__.py
。
これにより、パッケージからそれらをインポートしたり、オプションのサブパッケージをインポートしたりできるようになります。
ファイルfoo/__init__.py
:
class Bar(object):
...
ファイルmymodule.py
:
from foo import Bar
from foo.subfoo import ...
それにもかかわらず、誰かがこのアプローチを再確認して、それが正しいかどうか、または__init__
モジュールはそのように使用すべきではありません。