Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible:如何更改Python版本_Python_Python 3.x_Ubuntu_Ansible - Fatal编程技术网

Ansible:如何更改Python版本

Ansible:如何更改Python版本,python,python-3.x,ubuntu,ansible,Python,Python 3.x,Ubuntu,Ansible,试图使用GNS3来实践ansible脚本,有一个docker实例,名为“网络自动化”,内置ansible。但是,它仍然使用Python 2.7作为解释器: root@Network-Automation:~# ansible --version ansible 2.7.11 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u

试图使用GNS3来实践ansible脚本,有一个docker实例,名为“网络自动化”,内置ansible。但是,它仍然使用Python 2.7作为解释器:

root@Network-Automation:~# ansible --version
ansible 2.7.11
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.12 (default, Nov 12 2018, 14:36:49) [GCC 5.4.0 20160609]
我知道我可以使用“ansible playbook--version-e'ansible_python_解释器=/usr/bin/python3'”命令运行python版本3的playbook,或者我可以在playbook中指定变量:

- name: Common package
  hosts: all
  gather_facts: no
  vars:
    ansible_python_interpreter: /usr/bin/python3
  roles:
    - { role: python, tags: [ init, python, common, addusers] }
...
...

然而,我希望有一个永久的方法来强制ansible使用Python3版本。我怎样才能做到这一点?谢谢

参考官方文件-

可以为Python2或Python3打包单独的Linux发行包。当从发行版软件包运行时,您只能将Ansible与安装它的Python版本一起使用。有时,发行版会提供一种安装多种Python版本的方法(通过一个单独的包或安装后运行的一些命令)。您需要与您的发行版联系,看看这是否适用于您的情况

在Python3下运行/usr/bin/ansible最简单的方法是使用Python3版本的pip安装它。这将使默认的/usr/bin/ansible与Python3一起运行:


$ pip3 install ansible
$ ansible --version | grep "python version"
  python version = 3.6.2 (default, Sep 22 2017, 08:28:09) [GCC 7.2.1 20170915 (Red Hat 7.2.1-2)]

如果您正在从源代码运行Ansible,并且希望在源代码签出时使用Python 3,请通过Python 3运行您的命令。例如:


$ source ./hacking/env-setup
$ python3 $(which ansible) localhost -m ping
$ python3 $(which ansible-playbook) sample-playbook.yml

根据,您只需在该主机的资源清册或ansible的配置文件中设置它(也可以与playbooks和/或资源清册在同一目录中提供):

要控制发现行为,请执行以下操作:

  • 对于单个主机和组,请使用ansible_python_解释器清单变量
  • 在全局范围内,使用ansible.cfg的[defaults]部分中的解释器\u python键

为什么不在您的角色中使用var目录

├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
在vars/main.yml中 加上

---                                                                                                                                                                        
# vars file for XXXX
  ansible_python_interpreter: /usr/bin/python3

根据以上评论,添加一些您可能忽略的要点:

  • 在最初的文章中,ansible是在root帐户下安装的,在许多其他环境中,您不会使用root帐户。在这种情况下,您需要先安装sudo su,然后使用pip3安装ansible,否则,它将只在~/.local/bin下为您的帐户安装
  • 在新的pip版本中,建议使用python3-m pip install xxx,而不是直接执行pip3 install xxx

或者如果要全局设置路径,则需要编辑您的
ansible.cfg
。为此,您需要将
解释器\u python
键更改为正确的路径。看:我也有同样的问题。使用pip3 keep,其python版本为2.7.5。如何强制它使用Python 3?