前提
ModuleNotFoundErrorで先に進まないので質問させて頂きました。
実現したいこと
エラーを解消してglicko-2 rating systemを実装したい。
参考記事:https://book-read-yoshi.hatenablog.com/entry/2022/02/13/glicko2_implementation
発生している問題・エラーメッセージ
Traceback (most recent call last): File "ファイル名.py", line 2, in <module> from glicko2 import glicko2 ModuleNotFoundError: No module named 'glicko2' ユーザー名MacBook-puro:ユーザー名$
該当のソースコード
python
1# ライブラリのインポート 2from glicko2 import glicko2 3import copy 4 5# プレイヤーのパラメータを設定する関数 6## 変数rating, rd, volはそれぞれrating、rating deviation、rating volatilityの初期値 7## playerオブジェクトを1つ返す 8def setPlayer(rating=1500, rd=350, vol=0.06): 9 player = glicko2.Player() 10 player.rating=rating 11 player.rd=rd 12 player.vol=vol 13 return player 14 15player1 = setPlayer(1400,30,0.06) 16player2 = setPlayer(1550,100,0.06) 17player3 = setPlayer(1700,300,0.06) 18player4 = setPlayer(1500,200,0.06) 19 20# 複数プレイヤーのrating等パラメータを計算する関数 21## 変数playersは複数のplayerオブジェクトを格納したリスト 22## 変数ranksは複数のplayerの対戦時における順位を格納したリスト 23## 各playerのrating等を更新してplayersリストを返す 24def calcRatings(players,ranks): 25 newPlayers=[] 26 for i, (target_player,target_rank) in enumerate(zip(players,ranks)): 27 new_target_player = copy.deepcopy(target_player) 28 ratings=[] 29 rds=[] 30 outcomes=[] 31 for j, (player, rank) in enumerate(zip(players,ranks)): 32 if not i==j: 33 ratings.append(player.rating) 34 rds.append(player.rd) 35 if rank>target_rank: 36 outcomes.append(1) 37 elif rank<target_rank: 38 outcomes.append(0) 39 elif rank==target_rank: 40 outcomes.append(0.5) 41 42 new_target_player.update_player(ratings, rds, outcomes) 43 newPlayers.append(new_target_player) 44 45 return newPlayers 46 47players=[player1,player2,player3,player4] 48ranks=[4,2,1,3] 49 50players=calcRatings(players,ranks)
試したこと
・pythonがimportしているpathを確認
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages'
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
Python 3.6.6
VScord
https://github.com/deepy/glicko2
を使ってると思いますが、どのようにインストールしたのでしょうか?
$pip install glicko2
ターミナルで上記の文字を打ってインストールしました。
> pip install glicko2
ターミナルで上記の文字を打ってインストールしました。
と同じ状態で、
pip show glicko2
を実行してください
いろいろ表示される中に「Location:」で始まる行がありますので、そこに書かれてるパスを記録してください
次に、pythonで
from glicko2 import glicko2
がうまくいかない状態で、下記のpythonコードを実行してください
import sys
import pprint
pprint.pprint(sys.path)
たくさんパスが表示されますが、その中にpip show...で記録したパスが入ってますでしょうか?
入ってないとimportできません
記録したパスは、
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages
だったのですが、
import sys
import pprint
pprint.pprint(sys.path)
こちらの場合は、
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']
と表示されました。
Pythonの後ろの数字が違います。
python 3.9に紐付いてるpipでglicko2をインストールしたのに、(glicko2がインストールされてない)python 3.6でimportしようとしてエラーになってます
・python 3.6のpipでglicko2をインストールする
・python 3.9でimportする
のどちらかを行えば、importできると思います
【追記】
二つのpythonがインストールされてると、今回のようなトラブルの原因になるので、二つのpythonをインストールしておく必要が無いなら、今後どちらを使っていくかを決めて、使わない方は削除することをお勧めします
Python3.9.2だと黄色い波線が消えてvscord内の実行はできたのですが、サイトにあるような結果が出てきませんでした…。
vscord内のターミナルで
Python3 名前.py
と実行すると、
Traceback (most recent call last):
File "名前.py", line 2, in <module>
from glicko2 import glicko2
ModuleNotFoundError: No module named 'glicko2'
とモジュールエラーが出ます。
> vscord内のターミナルで
Python3 名前.py
> ModuleNotFoundError: No module named 'glicko2'
VS Codeのターミナルで下記を実行したら、何と表示されますか?
which Python3
python 3.6が使われてるのではありませんか?
> Python3.9.2だと黄色い波線が消えてvscord内の実行はできたのですが、サイトにあるような結果が出てきませんでした…。
それは、この質問の「ModuleNotFoundError: No module named 'glicko2'」とは別内容なので、別の質問をしてください
仰る通り、3.6が使われていました。
承知いたしました。