pythonのimportについて
2012 ワード
動的ロードモジュール:
使用__import__
に等しい
ただし、前者は実行時に決定できます.
静的ロード:
つまり通常のimport
or
xxxの最小粒度はファイルであり、yyyの最小粒度はファイル内のクラス/変数/関数である.
importオブジェクトの検索順序:
1. sys.path
ここからロードされるのでsysを変更できます.pathは探している範囲を修正します.
2.相対パス
Pkg--__init__.py
|----mod1 ----__init__.py
| |-mod1.1.py
| |-mod1.2.py
|-mod2-----__init__.py
|-mod2.1.py
|-mod2.2.py
一つの問題に注意する.現在、明確な相対パス(explicit relative path)を使用している場合、ポイント番号を使用している場合は、現在のモジュールを直接実行しないでください.エラーが発生するため:ValueError:Attempted relative import in non-package.詳細はここを参照してください.
例えばmod 2.2.py中
このほかにも、ポイント番号を使用せずにpython自身が相対パスを検索できるようにする暗い相対パス(implicit relative path)があります.----この方式は推奨されない.
同じmod 2です.2.py中
相対パスはあまり推奨されていません.ここを参照してください.提案常に絶対パスを使用.
mod2.2.py
いつfrom module importを使うべきですか?モジュールのプロパティとメソッドに頻繁にアクセスし、モジュール名を何度も入力したくない場合は、from module importを使用します. 他の属性やメソッドを選択的にインポートしたい場合は、from module importを使用します. モジュールに含まれるプロパティとメソッドがモジュールと同じ名前の場合は、import moduleを使用して名前の競合を回避する必要があります. の量はfrom module import*を少なくします.特殊な関数や属性がどこから来たのかを判定するのは困難で、デバッグや再構築がさらに困難になります.
使用__import__
c=__import__('sys')
に等しい
import sys
ただし、前者は実行時に決定できます.
静的ロード:
つまり通常のimport
from xxx import yyy
or
import xxx.yyy
xxxの最小粒度はファイルであり、yyyの最小粒度はファイル内のクラス/変数/関数である.
importオブジェクトの検索順序:
1. sys.path
ここからロードされるのでsysを変更できます.pathは探している範囲を修正します.
2.相対パス
Pkg--__init__.py
|----mod1 ----__init__.py
| |-mod1.1.py
| |-mod1.2.py
|-mod2-----__init__.py
|-mod2.1.py
|-mod2.2.py
一つの問題に注意する.現在、明確な相対パス(explicit relative path)を使用している場合、ポイント番号を使用している場合は、現在のモジュールを直接実行しないでください.エラーが発生するため:ValueError:Attempted relative import in non-package.詳細はここを参照してください.
例えばmod 2.2.py中
from . import mod2.1# 1
from .mod2.1 import *# 2
このほかにも、ポイント番号を使用せずにpython自身が相対パスを検索できるようにする暗い相対パス(implicit relative path)があります.----この方式は推奨されない.
同じmod 2です.2.py中
from mod2.1 import *#or
import mod2.1
相対パスはあまり推奨されていません.ここを参照してください.提案常に絶対パスを使用.
mod2.2.py
from Pkg.mod2.mod2.1 import *# or
import Pkg.mod2.mod2.1 as some_short_sig
いつfrom module importを使うべきですか?