ModuleNotFoundError

Pycharmにおいて、インストール済みのモジュールでModuleNotFoundErrorが発生した場合の対処方法について説明します。

 

 

私の環境&現象

私の環境では「mojimoji」というライブラリがインストール済みにも関わらず、PyCharm上で、「モジュールはありません」というメッセージが表示されました。

 

インストール済みのライブラリ

 

 

「mojimoji」はインストール済なのに、モジュールはありませんというメッセージが表示される

 

 

 

行間調整

いろいろ調べたところ、解決方法は案外単純でした。

 

解決方法は、「赤い警告マーク(電球のマーク)のパッケージXXXのインストール」を押すこと。

 

インストールをクリックすると、数秒反応がありませんが、右下に「パッケージが正常にインストールされました」と表示されます。これでパッケージが使用できるようになりました。

 

 

以上です。同じような現象でお困りの方は是非お試しください。

pip installとpython -m pip install の違い

パッケージをインストールする際に、①「pip install」で実行する方法と②「python -m pip install」で実行する2つの方法があります。

# パッケージのインストール構文(2つの方法)
pip install <Package>
python -m pip install <Package>

 

どちらもパッケージをインストールするということは変わりません。

では、どちらを使えばいい?という問いの結論は『python -m pip installを使う』が答えです

というより、そもそも複数バージョンの Python を PC 内にインストールしていなければ気にしなくてOKです。

 

 

では2つの違いについて。

pip install … pip コマンドで実行されるPythonにインストールされる

python -m pip install … pythonコマンドで実行されるPythonにインストールされる

 

この違いによって、パッケージのインストール先(Pythonのバージョン)が異なる可能性がでてきます。つまり、バージョンの違いによるトラブルが発生しかねないということになります。

 

つまり、Pythonのスクリプトを実行する際には、python コマンドを実行しています。「python -m pip install」でインストールを行うことで、(同じpythonコマンドを使っているため)パッケージのインストール先をスクリプト実行時に使用しているバージョンの Python に統一することができ、不整合の発生を防ぐことができます。そのため『python -m pip install』を使うことを推奨しているというわけです。

前ゼロ埋め

前ゼロ埋めをする方法です。

# 前ゼロ埋めする構文
str(ゼロ埋めしたい数値).zfill(何桁にするか)

# 実行例
print( str(123).zfill(6) )        # 000123
print( str(1234).zfill(8) )       # 00001234
print( str(12345).zfill(10) )     # 0000012345

 

 

 

後ろゼロ埋め

後ろゼロ埋めをする方法です。

# 後ろゼロ埋めする構文
str(ゼロ埋めしたい数値).ljust(何桁にするか,'0')

# 実行例
print( str(123).ljust(6,'0') )        # 123000
print( str(1234).ljust(8,'0') )       # 12340000
print( str(12345).ljust(10, '0') )    # 1234500000

 

数値であるかのチェック

数値であるか(=数値に変換できるか)チェックする方法です。

チェックには、変換を試してエラーにならなかったら数値、なったら数値以外と判断します。

# 数値であるかのチェック
# True:数値である、False:数値でない
  try:
    float('数値の文字列'.replace(',',''))
    print('True')
  except ValueError:
    print('False')


# 実行例
'123'           # True
'1,234'         # True
'1,234'         # True
'1,234.567'     # True
'+1,234.567'    # True
'-1,234.567'    # True
'.12'           # True
'123'         # True
'+1、234.567'  # False
'ab'            # False

matplotlibのインストール

matplotlibのインストールには、コマンドプロンプトで次のコマンドを実行します。

※ Matplotlib … Pythonのグラフ描画のためのライブラリ

# Matplotlibのインストール
python -m pip install matplotlib

 

 

Successfullyと表示されればインストールが完了です。

警告

AI学習時に以下の文が表示された場合について説明します。

Stochastic Optimizer: Maximum iterations (1000) reached and the optimization hasn't converged yet.

 

まずこれはエラーではなく警告文です。

 

直訳:収束の警告。確率的最適化です。最大反復回数(1000)に達し、最適化がまだ収束していません。

意味としては、『最大学習回数に達しましたが、まだ学習しきれていないため、イテレーション(反復処理)を増やすように警告』しています。

 

そのためイテレーションの数を増やし再実行することで警告がなくなります。

clf = MLPClassifier(hidden_layer_sizes=10, activation='relu',solver='adam'
, max_iter=1000)

↑ max_iter=1000の数を増やすことで警告がなくなります

install pyproject.toml-based projectsエラー

pipでのインストール時、「Could not build wheels for XXXXX, which is required to install pyproject.toml-based projects」が発生した時の対処方法の説明です。※XXXXXはライブラリ名

 

 

 

対処

対処方法は「Microsoft Visual C++ Build Tools」をインストールすることです。

手順を行うことで次のようにエラーが解消しました。

 

■Before(エラー画面)

 

 

■After(正常終了画面)

 

 

 

手順

以下、その手順を紹介します。

1)ダウンロードサイトを開きます。

アクセスするといきなりダウンロードが始まるので保存をします。

 

2)ダウンロードしたexeファイルを実行

 

 

3)「C++ Build Tools」をインストール

インストールしたのは画像右のチェックが入っている3つです。

※サイズが0Bになっているのはインストール済みの画面のため

 

 

 

4)cl.exeのパス設定

「Developer Command Prompt for VS 2019」を起動し、「where cl」と入力。でてきた結果をコピーします。

 

 

5)4で取得したパスを環境変数に登録する

システムのプロパティ>詳細設定>環境変数を開きます

画面下の「システム環境変数」のPath>編集から上で取得したパスを追加します。

※PCの再起動はしなくてもOKです

 

 

6)コマンドプロンプトを立ち上げ、4で使用した「Developer Command Prompt for VS 2019」に、「cl」します。

Microsoft・・・と表示されればOKです。

 

 

以上で手順はOKです。

再度pipコマンドを実行してみましょう。

大文字を小文字に変換する

大文字を小文字に変換するには「lower」を使用します。

# 大文字を小文字に変換する構文
文字列.lower()

print( 'Google'.lower() )     # google
print( 'Amazon'.lower() )     # amazon
print( 'Facebook'.lower() )   # facebook

 

 

 

小文字を大文字に変換する

小文字を大文字に変換するには「upper」を使用します。

# 小文字を大文字に変換する構文
文字列.upper()

print( 'Google'.upper() )     # GOOGLE
print( 'Amazon'.upper() )     # AMAZON
print( 'Facebook'.upper() )   # FACEBOOK

文字列を左から切り取る

文字列を左から切り取る方法(エクセルのLeftに相当)を紹介します。

# 文字を左から切り取る構文
# 文字列[0 : 切り取る文字数]

# 例1
moji = '1234567890'        # 切り取り対象の文字列
moji_su = 3                # 切り取る文字数
print(moji[0 : moji_su])   # 結果:123

# 例2
moji = '1234567890'
moji_su = 5        
print(moji[0 : moji_su])   # 結果:12345

# 例3
moji = 'abcdefghij'
moji_su = 6        
print(moji[0 : moji_su])   # 結果:abcdef

 

 

文字列を右から切り取る

文字列を右から切り取る方法(エクセルのRightに相当)を紹介します。

# 文字を右から切り取る構文
# 文字列[len(文字列) - 切り取る文字数:]

# 例1
moji  = '1234567890'                  # 切り取り対象の文字列
moji_su = 3                           # 切り取る文字数
print( moji[len(moji) - moji_su:] )   # 結果:890

# 例2
moji  = '1234567890'
moji_su = 5
print( moji[len(moji) - moji_su:] )   # 結果:67890

# 例3
moji  = 'abcdefghij'
moji_su = 6
print( moji[len(moji) - moji_su:] )   # 結果:efghij

 

 

文字列の任意の位置から、設定した文字数を抜き出す

文字列の任意の位置から、設定した文字数を抜き出す方法(エクセルのMidに相当)を紹介します。

# 文字列の任意の位置から設定した文字数を切り取る構文
# 文字列[切り取り開始位置 - 1 : (切り取り開始位置 + 切り取る文字数 - 1 )]

# 例1
moji  = '1234567890'     # 切り取り対象の文字列
start  = 4               # 切り取り開始位置(わかりやすく1~カウント)
moji_su = 3              # 切り取る文字数
print( moji[start - 1 : (start + moji_su - 1 )] )  # 結果:456

# 例2
moji = '1234567890'
start = 3
moji_su = 5
print( moji[start - 1 : (start + moji_su - 1 )] )  # 結果:34567

# 例3
moji = 'abcdefghij'
start = 3
moji_su = 6
print( moji[start - 1 : (start + moji_su - 1 )] )  # 結果:cdefgh

 

文字列のバイト数を取得する

文字列のバイト数を取得するには「len」を使用します。

# 文字列を検索し位置を取得する
len('文字列'.encode('utf-8'))

# 返り値
# 文字のバイト数(全角は3バイト)

# 実行例
print(  len('English'.encode('utf-8'))  )          # 結果: 7
print(  len('ENGLISH'.encode('utf-8'))  )    # 結果: 21
print(  len('あいうえお'.encode('utf-8'))  )        # 結果: 15