2016-03-07 123 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。 –

相關問題