Python 3.x 升级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 &

我想将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 <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]