Python 3.x 升级ansible以在控制器上使用python3
我想将ansible更改为在控制器上使用python3.5。我已经安装了ansible和python3.5,是否有办法将其更改为使用python3 ansible文档建议使用ansible测试python3,使用Python 3.x 升级ansible以在控制器上使用python3,python-3.x,ubuntu,ansible,Python 3.x,Ubuntu,Ansible,我想将ansible更改为在控制器上使用python3.5。我已经安装了ansible和python3.5,是否有办法将其更改为使用python3 ansible文档建议使用ansible测试python3,使用python3/usr/bin/ansible localhost-m ping。但如果这不起作用,就不要再详细说明了 我的结果是: Traceback (most recent call last): File "/usr/bin/ansible", line 32, in &
python3/usr/bin/ansible localhost-m ping
。但如果这不起作用,就不要再详细说明了
我的结果是:
Traceback (most recent call last):
File "/usr/bin/ansible", line 32, in <module>
from ansible import context
ImportError: No module named 'ansible'
回溯(最近一次呼叫最后一次):
文件“/usr/bin/ansible”,第32行,在
从可转换的导入上下文
ImportError:没有名为“ansible”的模块
我也尝试过在没有运气的情况下安装ansible:
File "<string>", line 1, in <module>
File "/tmp/pip-build-eadti4n6/ansible/setup.py", line 12
print "Ansible now needs setuptools in order to build. " \
^
SyntaxError: Missing parentheses in call to 'print'
文件“”,第1行,在
文件“/tmp/pip-build-eadti4n6/ansible/setup.py”,第12行
打印“Ansible现在需要设置工具才能构建。”\
^
SyntaxError:调用“print”时缺少括号
问:我想将ansible更改为在控制器(Ubuntu)上使用python3.5
答:Ubuntu 18.04中最新的ansible 2.8包使用Python2
> cat /etc/apt/sources.list.d/ppa_launchpad_net_ansible_ansible_2_8_ubuntu.list
deb http://ppa.launchpad.net/ansible/ansible-2.8/ubuntu bionic main
> ansible --version
ansible 2.8.4
[...]
python version = 2.7.15+ (default, Nov 27 2018, 23:36:35) [GCC 7.3.0]
但是,如果可以的话,可以在远程主机上使用Python3。比如说
> grep test_01 hosts
test_01 ansible_python_interpreter=/usr/local/bin/python3.6
> ansible test_01 -m ping -vvv
ansible 2.8.4
[...]
python version = 2.7.15+ (default, Nov 27 2018, 23:36:35) [GCC 7.3.0]
[...]
SSH:EXEC SSH-C-o ControlMaster=auto-o ControlPersist=60s-o KbdInteractiveAuthentication=no-o PreferredAuthentications=gssapi with mic、gssapi-keyex、基于主机、公钥-o PasswordAuthentication=no-o'User=“admin”'-o ConnectTimeout=30-o
[...]
成功成为LWCVMOMXXDJJPBIPvzerTvrTvrTfluAQBT/usr/local/bin/python3.6“&&sleep 0”
升级成功
(0,'\n{“ping”:“pong”,“invocation”:{“module_args”:{“data”:“pong”}}}}}\n','')
如果你真的需要“Ansible Python3 at master”,你可能想试试pip。看见它可用于Python2和Python3。注意正确设置路径。为了确定您运行的是什么卸载Ubuntu ansible软件包。按照ansible页面上的说明,在删除以前的(2.7)版本后,我使用
pip3
安装了ansible:
当我得到ImportError:No module name'ansible'
错误时,我验证了ansible是可访问的,并发现ansible playbook
只是一个Python脚本:
$ which ansible
$ less /usr/bin/ansible-playbook
我想可能是安装出了问题,所以我重新编辑了它:
$ sudo -H pip uninstall ansible
$ sudo -H pip3 install ansible
最初的卸载只要求删除两件事,这次提交了一份详细清单。重新安装没有下载任何东西,显然从缓存中收集了所有东西
我尝试重新运行playbook,但再次出现ImportError:No module name'ansible'
错误。这导致了一个有趣的发现:
$ ansible --version
Traceback (most recent call last):
File "/usr/bin/ansible", line 34, in <module>
from ansible import context
ImportError: No module named ansible
显然,pip3
安装未能为ansible
可执行文件设置正确的shebang。搜索所有/usr/bin/ansible*
我发现ansible连接
也有一个python
shebang,而不是python3
一个,但所有其他文件都是正确的
在修复了不正确的Shebang之后,我的playbook运行正常。您需要卸载Ansible for python2,然后通过与python3关联的
pip
为python3安装它。Ansible将使用python3(如果可用),并且pip3
用于安装Ansible-但安装可能需要修复,有关详细信息,请参阅我的答案。
$ ansible --version
Traceback (most recent call last):
File "/usr/bin/ansible", line 34, in <module>
from ansible import context
ImportError: No module named ansible
ansible --version
ansible 2.9.2
config file = /home/MAGICLEAP/fkoschara/.ansible.cfg
configured module search path = ['/home/MAGICLEAP/fkoschara/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.5/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.5.2 (default, Oct 8 2019, 13:06:37) [GCC 5.4.0 20160609]