No module named winrm | Ansible WinRM



Question: No module named 'winrm'

嘗試使用 Ansible win_ping 模組,測試是否能夠連接 Windows 主機時,卻發生「winrm or requests is not installed: No module named 'winrm'」的錯誤訊息,但檢查後發現是有安裝 pywinrm 模組的?



使用「ansible -m python_requirements_info -a dependencies=winrm localhost」指令檢查時,系統確實是找不到 winrm 模組?






Answer:

查了很多資料之後,突然發現系統的 Python 版本為 3.9.16,但是 Ansible 檢查版本時卻顯示 Python 版本為 3.11.2


嘗試使用 alternatives 去切換主機的 Python 版本為 3.11,想說應該就可以匹配完成了吧?


但還是沒有解決匹配的問題,依然出現找不到 WinRM 模組的錯誤。後來,索性一個步驟一個步驟檢查,發現透過「sudo dnf -y install ansible」指令安裝 Ansible 時,便會讓 Ansible 使用相較於系統較新的 Python 3.11.2


改為採用「sudo pip3 install ansible」方式安裝,那麼 Ansible 便能使用跟系統一樣的 Python 3.9.16,也就能正確找到 WinRM 模組並執行指令正確連接到 Windows 主機。







參考資源