2016-03-07 89 views
2

我正在使用ansible与服务器连接。但是由于Python版本较旧,我得到某些pip软件包的错误。我如何使用安全的方式安装特定版本的python(2.7.10)。 服务器上当前的python版本是2.7.6如何在使用Ansible的服务器上安装Python版本

现在我已经手动编译并安装了python版本,但宁愿有办法通过ansible来做到这一点。

回答

2

首先要考虑的是,你可能不要想替换或升级系统版本的Python。这是因为它被系统自身用于包管理等,所以替换它可能会导致其他重要的事情中断。

安装Python的额外拷贝别人做

要获得安装了Python的一个额外的版本,最简单的方法是使用ppa,如https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes-python2.7让别人已经做过的工作把Python变成一个包。

apt_repository: repo='ppa:fkrull/deadsnakes-python2.7' 

构建一个包自己

A可以用Ansible的apt repository module使用类似下面的指令,那么这将让你从中安装软件包的正常ansible方式添加PPA

如果没有ppa具有您需要的Python版本,那么您可能需要自己构建一个.deb包。最简单的方法就是像checkinstall这样的工具。还有fpm,它可以采取很多不同的来源,并与他们deb,rpm等。它也可以采用仅适用于pip install的Python模块,并将其转换为您的系统软件包,这非常有用。

一旦你有一个deb包,您可以用Ansible的apt module

apt: deb=/tmp/mypackage.deb 
+0

非常感谢,如果我理解正确,那么您正在安装第二个版本的python。在这种情况下,我如何设置virtualenv指向这个python? apt_repository在哪里使用ppa安装? – Ankit

+0

它的安装位置取决于制作ppa的人选择安装的位置。我没有检查过我链接的那个。对于virtualenv,你可以选择使用'-p'选项,'virtualenv -p/path/to/my/python'来使用virtualenv的哪一个python –

2

此外,以@Simon弗雷泽的回答,下面的剧本是我在Ansible使用一些特定的Python 3版本准备的服务器安装:

# python_version is a given variable, eg. `3.5` 
- name: Check if python is already latest 
    command: python3 --version 
    register: python_version_result 
    failed_when: "{{ python_version_result.stdout | replace('Python ', '') | version_compare(python_version, '>=') }}" 

- name: Install prerequisites 
    apt: name=python-software-properties state=present 
    become: true 

- name: Add deadsnakes repo 
    apt_repository: repo="ppa:deadsnakes/ppa" 
    become: true 

- name: Install python 
    apt: name="python{{ python_version }}-dev" state=present 
    become: true 

我有以上的作用太大了,叫ansible-python-latestgithub link)如果你有兴趣。

+0

感谢这些东西,它执行OK,但是当我登录到远程服务器时并键入'python3 --version'我仍然没有改变Python 3.4.3我错过了什么? –

+0

欢迎。在曾经拥有3.2的服务器上,安装后'python3'仍然是3.2,并且安装了一个新的可执行文件'python3.5'。也许这是相同的情况? – Wtower

+0

已将ppa地址更新为“ppa:/ deadsnakes/ppa”。还向github项目提交PR。 –

相关问题