0

次のディレクトリ構造に2.6pythonスクリプトとライブラリがあります。

+ bin
\- foo.py
+ lib
\+ foo
 \- bar.py

bin/foo.py内のクラスをインスタンス化するためにユーザーに実行してもらいたいlib/foo.py。これを実現するために、私のbin/foo.pyスクリプトには次のコードがあります。

from __future__ import absolute_import
import foo
klass = foo.bar.Klass()

ただし、これにより次のようになります。

AttributeError: 'module' object has no attribute 'bar'

つまり、それfoo自体がライブラリではなく、期待どおりに機能するようにfoo名前を変更すると考えています。bin/foo.pybin/foo-script.py

bin/foo.pyスクリプトを保持してインポートする方法はありlib/foo.pyますか?

4

2 に答える 2

2

foo現在のディレクトリはデフォルトでパス上にあるため、他のモジュールをインポートする前にそれを削除する必要があります:

import sys
sys.path = [dir for dir in sys.path if dir != '']

または、lib優先されるようにディレクトリを先頭に追加します。

import sys
sys.path = ['../lib'] + sys.path
于 2013-01-24T19:51:37.000 に答える
0

import foo と書くだけで、確実に foo モジュールが現在のスコープにロードされます。パッケージとして lib と foo を仮定すると、それを機能させるためにこのようなものを書く必要はありませんか?

import lib.foo.bar as foobar
klass = foobar.Klass()
于 2013-01-24T19:57:06.087 に答える