Mac系统下Ansible库报ModuleNotFoundError: No module named 'pysftp'的解决方法
Ansible中pysftp模块找不到的问题解决
环境信息
操作系统:Mac OS
Ansible版本信息:
$ ansible --version ansible 2.10.8 config file = /Users/cfouts/.ansible.cfg configured module search path = ['/Users/myUser/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/Cellar/ansible/3.3.0/libexec/lib/python3.9/site-packages/ansible executable location = /usr/local/bin/ansible python version = 3.9.4 (default, Apr 5 2021, 01:50:46) [Clang 12.0.0 (clang-1200.0.32.29)]
问题描述
修改自定义ftp.py模块引入pysftp以支持SFTP后,执行任务时报错:
ModuleNotFoundError: No module named 'pysftp'
即使添加了安装pysftp的pip任务(执行显示ok),问题依然存在。
问题原因
Ansible在Mac上通过Homebrew安装时,会创建一个独立的Python虚拟环境(路径为/usr/local/Cellar/ansible/3.3.0/libexec/),默认的pip任务会将pysftp安装到系统或用户的Python环境中,而非Ansible专属的环境,导致模块执行时找不到依赖。
解决方案
1. 定向安装到Ansible的Python环境
修改pip任务,指定Ansible环境的pip路径:
- name: 为Ansible环境安装pysftp pip: name: pysftp executable: /usr/local/Cellar/ansible/3.3.0/libexec/bin/pip3.9 delegate_to: localhost
2. 命令行直接安装
打开终端执行以下命令,直接用Ansible的pip安装依赖:
/usr/local/Cellar/ansible/3.3.0/libexec/bin/pip3.9 install pysftp
3. 自动识别Ansible的pip路径
若不确定具体路径,可通过Ansible获取当前使用的Python解释器路径:
ansible localhost -m setup -a 'filter=ansible_python'
从输出中提取ansible_python.executable的值(例如/usr/local/Cellar/ansible/3.3.0/libexec/bin/python3.9),将末尾的python3.9替换为pip3.9,再执行安装命令。
验证
安装完成后重新运行任务,即可解决模块找不到的问题。
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

