pythonで相対的にインポートされた問題
985 ワード
質問1:相対インポートを使用していますが、実行タイムズ「ValueError:Attempted relative import in non-package」
現在実行されているモジュールに相対インポートが含まれていないため、ドキュメントを調べます.起動モジュールをインポートして実行する必要があります
問題2:モジュールの繰り返しインポート
pythonはsysを通過する.modulesはインポートしたモジュールを保存しますが、1つのモジュール内で実行すると、2重インポートの問題が発生する可能性があります.たとえば、次のディレクトリ構造があります.
Cディレクトリの下でb.pyを実行する場合、第1種はsys.pathは親ディレクトリを挿入し、モジュールをインポートすることによって の2つ目はinitを導入することによって を得ることである.
以上のコードを実行すると、2つの出力のid値が異なることがわかります.すなわち、
ネット上でpythonのいくつかの罠について話した文章を探して参考にすることができます.
したがって,この場合,まず一貫したインポート方式を採用し,また実行コードはパケットの外にあることが望ましい.
現在実行されているモジュールに相対インポートが含まれていないため、ドキュメントを調べます.起動モジュールをインポートして実行する必要があります
問題2:モジュールの繰り返しインポート
pythonはsysを通過する.modulesはインポートしたモジュールを保存しますが、1つのモジュール内で実行すると、2重インポートの問題が発生する可能性があります.たとえば、次のディレクトリ構造があります.
testdir/
c/
__init__.py
b.py
__init__.py
の内容は次のとおりです.x = []
Cディレクトリの下でb.pyを実行する場合、
__init__.py
の変数を使用する場合(関数の繰り返しインポートは構いません)、2つの書き方があります.import sys
sys.path.insert(0, '..')
from c import x
print id(x)
from __init__ import x
print id(x)
x
変数を得る.x
変数以上のコードを実行すると、2つの出力のid値が異なることがわかります.すなわち、
__init__.py
が繰り返しインポートされています.ネット上でpythonのいくつかの罠について話した文章を探して参考にすることができます.
したがって,この場合,まず一貫したインポート方式を採用し,また実行コードはパケットの外にあることが望ましい.