21日目のモジュール、パッケージのインポートファイルのディレクトリ指定

#今日の内容

*インポートモジュール

`` Pythonの`
" 『』
1モジュールは何
モジュール(OS、アプリケーション、ファイル処理モジュール、アプリケーション・タイム・モジュール)の一連の集合関数である
モジュール有する三の源
1内蔵モジュール
2サードパーティモジュール
3カスタムモジュールは、
4パフォーマンス形式モジュール
Pythonで書かれPYファイル1.使用する
2は、共有ライブラリまたはDLL Cとしてコンパイルされているか、C ++の拡張機能
があるフォルダ(フォルダに整理一連のモジュールを一緒3.プット)パッケージと呼ばれるファイルフォルダを__init__.py
4がCで書かれており、内蔵モジュールのPythonインタプリタに接続されています

2.なぜあなたはモジュールを使用します
1.利点がある内蔵またはサードパーティモジュール:イズムを、大幅に開発効率向上させる
カスタムモジュールの利点がある2.を:抽出手順は、より多くの公共の場所を使用する必要があります冗長コードの減少として定義された機能モジュールは、
(プログラムがマルチファイルで、複数のファイルが団結見つけるために皆のために一つの場所ですべての機能を使用する必要があります)

3.モジュールの使用方法
前提を:私たちは、実行可能ファイル、インポートするモジュールであるが誰であるかを区別しなければならない
"「」
` ``は、

####輸入使用

Pythonの`` `
" ""
新しい実行2つのPyが導入されたファイル
" ""
のmd.pyの
印刷( 'md.pyから')
マネー= 1000
DEFリード1():
印刷( 'MD'、マネー)
READ2 DEF():
印刷( 'MDモジュール')
リード1は、()
DEF変更():
グローバルマネー
マネー= 0

#run.pyの
マネー= 66
インポート#MDのファイル名は、モジュールとmd.py MDの名前です。

#右の実行、複数の輸入が複数回実行されません、MDファイルを実行します
。「」 "
1.三つの最初のインポートは、モジュール起こる
1.ネームスペースモジュールを生成し
、ファイルmd.pyを実行2.実行しますプロセスで生成された名前は、モジュールの名前空間に配置されている
メモリアドレス:1000「お金」
「READ1」:メモリアドレスREAD1機能
「READ2」:メモリアドレスREAD2機能
[変更]:メモリアドレス変更機能の
アイコンより良い効果を理解する
名前空間モジュールの名前を指し、現在の実行ファイルの名前にスペースを取得するために3.モジュール名を
:で
、すべてのMDファイル名、今MDファイルを実行しますが、それは確かに名前空間を作成します値との結合関係は、最大保存する

ことは確かに名前空間を作成します、また、ファイルを実行し、実行し、お金は店舗MDに行った
のメモリアドレス66:「お金」
「MD」:の名前アドレスmd.pyスペース
2。インポートは、最初のインポートの結果への直接参照は、ファイルを再実行しませんでした後
"「」
モジュール名の名:#1。は、ファイルアクセスモジュールの名前空間名実行構文
プリント(md.money)という名前の#をあなたがMDに名前を付けたいファイルの道路名 お金、現在実行中のファイルの名前と確かに競合しない
お金の現在の名前空間名にファイルのお金を実行する#

(md.read1)印刷
印刷(md.read2)を
括弧>>>インパルスによって実行される機能のメモリアドレスを取得する(md.change)#を印刷

#ワンコールREAD1、READ2は、変更は、法の名を見つけるために繰り返しクリア
md.read1を()#はマネーでファイルを探しているMD
(md.read2)#はお金のMDファイルを探して
(md.change)#を修正しますMDファイルはお金です


モジュール#ライン(推奨しない)複数の導入
インポートOS、SYS、タイム
モジュール#名エイリアスに導入するので
、XYとしてインポートxxxyyy

「」 "
インポートインポートモジュールの概要:
。モジュール名:使用時における前置しなければならない
名前空間、現在のネームスペース名を持つ確かに競合する名前に名前によって:長所
短所:たびの使用モジュールは、モジュール名接頭辞を追加する必要があります
「」 "
` ``

 

###から...インポート...

`` `Pythonの
まだ例えば二つの文書、上記#
MD輸入マネーから
MD輸入マネーから
" 『』
から...インポート...三つのことは、輸入のような2インポートする前に、最後に行われました少し異なる
1.名前空間モジュールが生成する
ファイルmd.pyを実行2.実装プロセスの名前は、名前空間モジュール内に生成され
、現在の実装では、ファイル名を取得する直接3モジュール名に対応するの名前である
MDファイルマネー:「お金」
「」 "
#1。
マネー= 888
、MDからインポートマネー
#2
のMDインポートマネーから
マネー= 888

#要約
「」「
利点:プラス、より簡潔な接頭辞を使用する必要はありません
名前空間の現在の紛争の名前があります。短所は
」「」
MDインポートリード1から
マネー= 999
定義フェーズでリード1()#関数呼び出しが修正されましたが死んで、呼び出し元の場所とは関係がここにありません変更されたファイルの名前空間名の唯一の実装です!示し高く評価
別の例の証拠#
チャンは()#値が変更され、マネーモジュールファイルの実装はお金の何も指さ
印刷(金)

#学び
名が現在のスペースの名前と競合する可能性があるため、*#*代表は、インポートされたモジュールからすべての名前(推奨されません)を取得するためにMDインポートから
#*インポート__all__サプリメントは内部__all__です記載されているすべての名前
`` `

 

インポートモジュール###サイクル

Pythonの`` `
" ""
モジュールは
m1.py
印刷( 'M1インポートされている')
M2 Y#インポートから最初のインポートで発生するための3つの事柄
X = 'M1'
m2.py
印刷( '平方メートルをインポートされています')
X-M1をインポート
Y- =「M2」
実行ファイル
run.pyの
起こるために輸入M1#三つの最初のインポート
。「」 "
段階の分析による#ステップは、対応する名前空間を生成するために実行最初の実行を行った
ことがあるので、#インポートM1を最初のインポートは、M1、対応する名前空間を作成します
コードを#実行m1はM1で見つかったとm2を案内され、m2は最初の輸入である
#㎡名前空間を作成、平方メートルコード実行
M1 Xに見つける必要で#1平方メートルをこの時間は、xから作られていない
「「」
この現象の問題は、インポートされた循環しているガイドは、M1、M2、M2 M1順番に導く
あなたのプログラムの設計は無理がある、インポート、必要性を再設計する循環手段の出現を
」」 "

#インポートサイクルによって引き起こされる問題の解決
に定義後ろ名にインポートステートメントサイクル:#1方法
プリント(「インポートされM1」)
X- =「M1」
Y-M2インポートからの

印刷( '導入されるM2')
Y = 'M2'
M1 Xインポートから


#実施例2:関数に導入ループ文
プリント( 'インポートされM1')
DEF F1():
M2インポートのYから
プリント( 'm1.f1 >>> Y'、Y)
X = 'M1'

プリント( 'M2導入される')
DEF F2():
M1 Xインポートから
プリント( 'm2.f2 >>> X'、X)
Y = 'M2'
位理解て示さ

#概要:インポートする前に、その名前を聞かせする準備ができて
`` `

####判定PYファイルは、モジュールまたは実行可能ファイルとしてインポートされます

Pythonの`
IF __name__ ==「__main__」:ファイルが直接実行される#
場合__name__ ==「PYファイル名」#ファイルがインポートされると
`

###モジュールの順序を探します

`` Pythonの`
" 『』
クエリシーケンスモジュール
1は、探し始めるのメモリにロードされている可能性があり
、内蔵モジュール2
の外観へのパス内の3.sys.pathリストごとに
最初のパスのsys.pathのリストを知っている必要があります現在のファイルが実行されるフォルダである
Pythonのモジュールもでzipアーカイブから直接インポートをサポートします。psは
"「」

#検証最初のポイント、すでにロードされていないモジュールを参照してくださいするために探し始めるメモリモジュールを見つけるために探して
"「」。
別のファイルにインポートされたモジュールを定義して、モジュールの間に迅速話すように、ファイルのアクティブスリープ10Sを実行しますファイルを削除し、ファイルを実行した後のコードはまだアクセスすることができ、睡眠を見つけること
が、プログラムが終了すると実行していると、エラーが再び実行されます
インポート時間
インポートM1
time.sleep(10)
輸入M1
m1.f1()
「」 "

という#注意をPYファイル名あなたの新しい最高ではない既存のモジュール名競合時のモジュールに、例えば
`` `

####もう少し複雑な例

Pythonの`` `
同じレベルのモジュールのファイルでさまざまなレベルでのファイルやフォルダを実行し、フォルダ内のモジュールを有効にするには、#
輸入MD。#ので、メモリの保存は、ビルトインはしなかった、のsys.pathは現在のファイルを実行することです位置していますファイル検索するフォルダ
解決するために#を、sys.path.appendを使用する必要があります()ファイル・モジュールがそれに追加されたフォルダへ

#は、上記で解決したくない、それは次のように使用することができます
から...インポート...

dir1.dir2輸入MDから
`` `

 

絶対インポート###モジュール

`` Pythonは`
#が再び強調:インポートされたモジュールは、実行可能ファイルとインポートファイルをクリアにする必要があり、のsys.pathは、ファイルが実行されているフォルダに基づいています
-アブソリュートモジュールインポート
-dir1
-m1.py
-m2.py
-run .py
実行ファイルrun.pyがフォルダに「絶対にモジュール輸入は」DIR1根拠を見つけることができますので、M1の中に発見することができているdir1の輸入M1#フォルダからファイル

以上の例#一つは、人々を混乱させるために
-絶対インポートモジュール
-dir1
-m1.py
-m2.py
-run.py
#M1 M2直接ガイド


#そしてそれを再び勉強
-絶対にモジュールをインポート
-dir0
-dir1
-m1.py
-m2.py
-run.py
#モジュールのすべてのファイルは、ファイルの実行の対象となっているインポートする
#はDIR0に追加することがsys.path.appen使用することができます環境変数

「」 "
概要:絶対インポートと呼ばれる、層の間の関係を見つける(のsys.pathに基づいて)ファイルを実行するために始める
の利点:モジュールをインポートする実行可能ファイルを使用することができます
短所:すべての輸入が遊びにのsys.pathに必要とされています出発点、トラブルのインポート
。「」 "
` ``

相対的なモジュールの紹介####

`` Pythonの`
" 『』
相対的な輸入:参照ファイルは現在、検索開始フォルダに存在する
文書がファイルフォルダの現在の場所を表し
フォルダに代わっ..
上位に代わって...フォルダ

利点:インポートもっと合理
欠点:モジュール内でのみ使用することができますがインポートされ、ファイルがで実行することができません
「」 "
しかし、相対的な輸入がインポートされたモジュールフォルダ内のみを使用することができます#注意、ファイルが実行できません中古

 

 

 

 

 

 

 

 

パッケージ#

3要因4つのパフォーマンスのフォーマットの話されたモジュールモジュールを話します

`` `のPython
モジュールは、三元有する
1内蔵モジュール
2サードパーティモジュール
3.カスタムモジュール
性能フォーマットモジュール4種類
1.パイソンPyが書かれた文書
2.共有ライブラリまたはDLL CとしてコンパイルされているがまたはC ++の拡張
3.フォルダ(__init__.pyファイルフォルダ、パッケージと呼ばれるフォルダ)に一緒にグループ化された一連のモジュール
4がCで書かれており、内蔵モジュールのPythonインタプリタに接続されています


プレゼンテーションモジュールやパッケージの起源#

「」 "
どのようなパッケージである
パッケージを含むファイルは__init__.pyファイルフォルダで
インポートするために使用されるように、本質的にモジュールをインポートすることができますが、ファイルは、パッケージの内側に含まれています
。2.なぜ詰める必要があります
フォルダは、より良いファイルの管理に使用され、パッケージの設計者は、より良い組織モジュールモジュールを容易にすることです
。「」 "

#ビルドし__init__.py(P1)を含むフォルダは、フォルダの分析プロセスにPYファイルの同じレベルに建てられました
。「」 "
インポートされたモジュールの思い出三つのことは
、モジュールの名前空間の生成1.
2.実行モジュールをファイル名にコードが実行中に生成される名前空間に投げ込まれている
名前は、ネームスペースモジュールを指している、現在のファイルを実行するの名前を取得します。3.

質問:第2のステップは、モジュールのコードの実行文書をインポートすることで、今それを投げたんその後、エグゼクティブ、フォルダのですか?

インポートパッケージは三つの推論
名前空間を生成するための基準として、パッケージ内の1 __init__.pyファイルを
2.ファイル名を指定して実行__init__.pyファイルパッケージ内のコードを、名前は実行中に生成されるがスローされます名前空間
3.現在の実行P1内のファイルの名前を取得し、p1はポイント__init__.py名前空間です
「」 "
#1のpython3を確認する場合にも与えられていない__init__.py含まれていないフォルダ
#の切り替えをpython2は直接エラーに見つから
なくてもエラーがない場合のpython、パッケージの内側にある#のpython2は__init__ファイルを持っている必要があります


#インポートパッケージを確認すると、ポイント__init__.pyファイルである
モジュールの名前#アクセス、実際には、名前を見つけるために__init__.pyファイルを行きます
`` `

####検索名

`` Pythonは`
それは同様PYファイルの構築可能性があるので、派生ガイドパッケージ上の#は、実際には、内部に基づいてファイル名にアクセスするために__init__.pyファイルを指している
パッケージは、パッケージの中に発見するために、すべてのPYファイル名です#インポートをだけではなく、__init__ファイル

「」 "
周りに移動しないでください、あまりにも二つの角度に直接話をする複雑な話


第一の角度:ユーザーパッケージの
ユーザーパッケージのダウンロード完成したパッケージの後に、ちょうど彼の内部に通常のプログラムでは、パケットのパスを見つけることを確認し、それをインポートする
、すなわちのsys.path操作するための環境変数の使用
パッケージが配置されているが環境変数にフォルダパスに(知っているユーザーのニーズがフォルダで、あなただけのソフトウェアをダウンロードし、ダウンロードモジュールまたはパックで、あなたは間違いなくどこ次に行き知っている必要があります)

import文。確かに、左には、パッケージでなければなりません

第二の角度:パッケージの設計者は
、すべてのモジュールがインポートに対するモジュール使用して見つけることを__init__.py独自のトップレベルのパッケージを書き込むことができることを確実にする
メリットがハイライトされている:
1.モジュール名の変更は、内部のルックアップには影響しません
2.いいえ関係のネストされたレイヤの概念で混乱し、ファイルにファイルを実行されます
「」 "
` ``

 

おすすめ

転載: www.cnblogs.com/AaronY/p/12596290.html