

事前にclass定義したICA使うため、

from ica import ICA

を実行した所、

ImportError: cannot import name 'ICA' from 'ica' （ファイル名....py名）

というエラーが出ました。  
これの解決方法がわかりません。


CC BY-SA 4.0
2021-09-28T17:44:08.670
82740
2022-04-20T11:14:11.290
2022-04-20T11:14:11.290
3060
48401
question
python python3
ImportErrorの解決方法


「事前にclass定義したICA」というのが、こちらの記事
[独立成分分析による音源分離](https://aidemy.net/magazine/685/)
の`ica.py`と同等なものだとして、以下のような対処が考えられます。

  * 一番単純なのはimportする呼び出し元のスクリプトファイルと`ica.py`を同じフォルダに格納し、そのフォルダをカレントフォルダとして呼び出し元のスクリプトファイルを実行することです。
  * 同程度に単純なのは、`ica.py`ファイルの存在するフォルダを環境変数`PYTHONPATH`に設定または追加することです。
  * importする呼び出し元のスクリプトファイルと`ica.py`を同じフォルダに格納し、import時に以下のようにカレントフォルダを移動する方法もあります。

[code]

    import os
    curdir = os.getcwd()
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    from ica import ICA
    os.chdir(curdir)
    
[/code]

  * 同様にimportする前に`ica.py`ファイルの存在するフォルダをモジュールパス変数のsys.pathの先頭などに追加する方法もあります。

[code]

    import sys
    sys.path[0:0] = 'path/to/ica.py folder'
    from ica import ICA
    
[/code]

  * また`ica.py`を単体ではなく以下のようにパッケージの形態を整えて、`ica`フォルダが存在するフォルダを上記のいずれかの方法で`ica.py`が存在するフォルダの代りに追加する方法もあります。 
    * `ica`フォルダを作成する
    * 以下のいずれかの方法でパッケージとしての形態を整える 
      * `ica`フォルダの中に`__init__.py`ファイルを作成し、`ica.py`ファイルの内容をそのまま記述しておく
      * `ica`フォルダの中に`ica.py`ファイルコピーし、追加で`__init__.py`ファイルを作成し以下の内容を記述しておく

[code]

    from .ica import ICA
    
[/code]


CC BY-SA 4.0
2021-09-29T10:33:47.823
82757
2021-09-29T10:33:47.823
26370
82740
answer