モジュールパッケージは、階層構造に編成されています
ただ、__init__.pyが可能で、各ディレクトリが定義されていることを確認してください。
すべてのシンボルの導入の2精密制御
ユーザは、モジュールのインポート*文で使用するとき、私たちは、モジュールやパッケージを正確に制御からインポートシンボルを願っています。
モジュール__all__で定義された変数は、名前を表示するために使用されるシンボルを導出することができる示します。
__all__ = [ "スパム"、 "完全に理解"]
3相対導入パッケージ名サブモジュールを使用して
mypackageと/
__init__ の.py
A /
__init__ の.py
spam.py
grok.py
B /
__init__ の.py
bar.py
#spam.py
から。輸入GROK
から ..B 輸入バー
バッグ・モジュールをインポートするには、このメソッドを使用し、それはファイル名の変更の上部はすべての問題をインポートします場合は、輸入の絶対名を使用している場合、インポートモジュールを減らすためには良いハードコーディングされたことができます。
PS。
スクリプトは、インポートエラーを実行するとき のpython3 -m mypackageと
複数のファイルにモジュール4
複数のモジュールにモジュールの構造を破壊することなく使用した場合の
パッケージに最初のモジュール、パッケージ内のサブモジュール__init__.pyファイルを導入します。
5統一名前空間の下に、各ディレクトリのインポートのコードをしてみましょう
foo_package /
スパム /
blah.py
bar_package /
スパム /
grok.py
インポートSYSの
sys.path.extend([ " foo_package "、" bar_package " ])
インポートspam.blahの
インポート spam.grok
共通の名前空間として、両方のディレクトリのスパムでは、これらの2つのディレクトリへの関心が__init__.pyファイルではありません支払います。
6リロードモジュール
開発環境は、本番環境を使用しないようにしよう
輸入IMP
輸入数学
imp.reload(数学)
7 zipファイルまたはディレクトリスクリプトがなるために実行できるように
MyApplicationを/
spam.py
bar.py
grok.py
__main__ の.py
PythonのMyApplicationを
あなたが__main__.pyファイルが含まれている場合、あなたは、実行するスクリプトなどの方法で__main__.py実行することができます
8は、パッケージ内のデータファイルを読み込み
mypackageと/
__init__ の.py
somedata.dat
spam.pyが見つかった
インポートpkgutil
データ = pkgutil.get_data(__PACKAGE__、" somedata.dat " )
#データのバイト列になります
9はのsys.pathにディレクトリに追加しました
三つのソリューションは、最初はPYTHONPATH環境変数の使用を追加することです。
ENV PYTHONPATH = /いくつかの/ディレクトリ:/その他/ディレクトリののpython3
第二は、site_packagesパイソンの.pthのファイルを.pthファイルを作成することです
#mtapplication
/いくつかの/ディレクトリ
/その他/ディレクトリ
第三は、コードにハードコードされています
インポートのSYS
sys.path.insert(0、" /何らかの/ DIR " )
sys.path.insert(0、" /その他/ DIR ")
10文字列の名前を指定してインポートモジュール
インポートのimportlib
数学 = importlib.import_module(" 数学")