私はPythonにまったく不慣れです。この質問は何度も聞かれましたが、残念ながら私の状況は少し違うようです...パッケージを作成しました(または)。カタログツリーは次のようになります。
mydir
lib (__init__.py)
mod1 (__init__.py, mod11.py)
カッコ内には、カタログ内のファイルがあります。 __init__.py
ファイルは両方とも長さがゼロです。ファイルmydir/lib/mod1/mod11.py
には以下が含まれます。
def mod12():
print "mod12"
今、私はpython
を実行し、import lib
を実行します。これは正常に動作し、次にlib.mod11()
またはlib.mod12()
を実行します。最後の2つのいずれかで、件名のエラーメッセージが表示されます。実際、ステップ2の後のdir(lib)
はmod11
またはmod12
のいずれも表示しません。本当にシンプルなものが欠けているようです。 (私はPython 2.6を使用しています)
ありがとうございました
_import lib
_をすると、パッケージをインポートしています。この場合、評価して実行する唯一のファイルは、libディレクトリの0バイト___init__.py
_です。
関数にアクセスしたい場合は、この_from lib.mod1 import mod1
_のようなことをしてから、mod1.mod12()
のような_mod12
_関数を実行できます。
lib
をインポートするときに_mod1
_にアクセスできるようにするには、lib
ディレクトリ内の_import mod1
_ファイル内に___init__.py
_を配置する必要があります。
より正確には、_mod1
_およびlib
ディレクトリはモジュールではなく、パッケージです。ファイル_mod11.py
_はモジュールです。
Pythonは、サブパッケージまたはモジュールを自動的にインポートしません。明示的に行うか、イニシャライザーにimportステートメントを追加して「チート」する必要があります。
_>>> import lib
>>> dir(lib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> import lib.pkg1
>>> import lib.pkg1.mod11
>>> lib.pkg1.mod11.mod12()
mod12
_
別の方法は、from
構文を使用して、パッケージからスクリプト名前空間にモジュールを「プル」することです。
_>>> from lib.pkg1 import mod11
_
次に、関数を単にmod11.mod12()
として参照します。
私がやる方法は、__ init__.pyファイルを空のままにして、次のようにすることです:
import lib.mod1.mod11
lib.mod1.mod11.mod12()
または
from lib.mod1.mod11 import mod12
mod12()
Mod1 dirは不要であり、libにmod12.pyがあるだけであることがわかります。
私の解決策は、これらのインポートを__init__.py
のlib:
in file: __init__.py
import mod1
その後、
import lib
lib.mod1
うまくいくでしょう。