LoginSignup
1
0

AttributeError: partially initialized module '❓❓❓' has no attribute '❓❓❓' (most likely due to a circular import) 解決法

Last updated at Posted at 2024-03-13

解決法

「AttributeError: partially initialized module '❓❓❓'」

  • 上記の「❓❓❓」の部分のモジュールと同名のファイルがないか確認
  • あれば(というかあるからエラー)、同名のファイルの名前を変更

例えば僕の場合は、

sample.py
import subprocess

を実行するとエラーが起きたので、、
Me/subprocess.py」を「Me/subprocess2.py」へ名前変更

Me/
 ├ sample.py
 ├ subprocess.py ← 「subprocess2.py」などに変更
 
Python/
 ├ Libs/
   ├ subprocess.py

すると正規のモジュール「Python/Libs/subprocess.py」が読み込まれます。

原因

単にファイル名がダブっていたことで、自作の非正規なsubprocess.pyが優先して読み込まれていただけでした。

ちなみにエラーの全文は

AttributeError: partially initialized module 'subprocess' has no attribute 'run' (most likely due to a circular import)

ですが、Me/subprocess.py内でrun関数を定義してしまっていたら更に沼っていたと思います。うっかり😜

予想

モジュール(なんとか.py)のimportって
同ディレクトリ > その他ディレクトリの順で読み込まれるんですかね。

DLLプランティングと同じ要領で、
標準モジュール.pyと同名のファイルを優先度の高い隠しディレクトリにインストールする、、
みたいなマルウェアがあると厄介ですね。

DLLプランティングとは?

exeファイルは実行される際、DLLファイルを参照することがあります。
このとき、読み込むDLLの優先度はカレントディレクトリ(exeがあるディレクトリ) > システムフォルダ等となります。
カレントディレクトリに正規のDLLが存在しない時、攻撃者はカレントディレクトリに本来読み込むべきDLLと同名のDLLファイルを配置します。

するとexeは優先度に従い、攻撃者が配置したDLLファイルを読み込みます。悪意あるコードが実行されてしまうということです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0