Como instalo o Python 2.7.X ou 3.X mais recente no Ubuntu?

183

Quero instalar o tarball mais recente do Python no Ubuntu, baixado de http://python.org/download/ .

Essa é a maneira correta de instalar?

./configure
make
make install

Se não, como faço isso?

mohammads
fonte
1
Ao mesmo tempo, imagino que isso foi solicitado para instalar uma versão mais recente do python no Ubuntu. Agora, é necessário instalar uma versão mais antiga do python no Ubuntu (porque ainda exigimos o python 2.7 para muitas coisas) ... tl; dr: esta resposta não é mais atual / correta. Em vez disso, supondo que o python3 esteja instalado por padrão (e talvez um mínimo de python2.x), execute:sudo apt-get install python-2.7 python-pip
michael
@michael_n do que você está falando? compilar a partir da fonte não torna esta resposta incorreta ou desatualizada. é apenas um método diferente. você pode usar o apt para automatizar o processo, se necessário.
Você usa o que precisa. Realmente não vejo como isso apóia sua alegação de que isso está desatualizado. como você disse, você o usa quando precisar, pois pode não estar disponível. Por exemplo, o subsistema windows para linux usa alguns pacotes de software datados, mesmo que a distribuição seja o ubuntu 16.04.1 (beta) e use python2.6.2, e python3, mesmo que a atual seja python2.7.12. Nesse caso, devo compilar se quiser pacotes atualizados
1
@jargonjunkie você está fora do tópico, mas correto. Se a pergunta é "como eu instalo o python 2.7 no ubuntu 16.04+", qual é (desde que o 16.04 já está disponível, qual é o meu ponto), então você simplesmente sudo apt-get install python2.7. Isso não é apenas mais fácil, é a única resposta correta, já que é a única maneira de lidar com a instalação de módulos python via apt-get e suas dependências.
michael
espero que isso ajude a ilustrar (resposta adicionada). o ecossistema python é muito particular / finicky, e você pode facilmente entrar em "inferno da dependência" se você não construir cuidadosamente seu ambiente python askubuntu.com/a/831075/17060
michael

Respostas:

199

Primeiro, instale algumas dependências:

sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Faça o download usando o seguinte comando:

version=2.7.13
cd ~/Downloads/
wget https://www.python.org/ftp/python/$version/Python-$version.tgz

Extraia e vá para o diretório:

tar -xvf Python-$version.tgz
cd Python-$version

Agora, instale usando o comando que você acabou de tentar, usando checkinstallpara facilitar a desinstalação, se necessário:

./configure
make
sudo checkinstall

Mude versionpara a versão que você precisa ( version=2.7.1ou version=3.6.0, por exemplo).

Achu
fonte
20
Use sudo make installe não altinstallpara defini-la como a versão python padrão
Shagun Sodhani
usar CXX=g++ ./configurese ./configure emite um aviso dizendo g ++ não foi encontrado
SRJ
2
Depois de instalar conforme as instruções acima, quais comandos eu executo no console para verificar se ele está realmente instalado?
J86 29/01
9
É extraordinário que a melhor resposta para a pergunta simples "como instalar o Python" tenha um aviso tão terrível, como "esta é a melhor maneira que sabemos instalar o Python e pode muito bem quebrar o sistema" ... É também É muito surpreendente que o site oficial do Python tenha muitos downloads e não uma única página de instruções de instalação.
patb 30/05
4
pat - a melhor resposta para a pergunta simples "como instalar o python" é sudo apt-get install python, a resposta mais complicada é "como instalar o python mais recente ", sendo a implicação "da fonte". Você terá o mesmo problema em qualquer sistema operacional, a menos que esteja instalando binários pré-compilados de terceiros, o que, novamente, é arriscado em qualquer sistema operacional (e varia muito entre diferentes sistemas operacionais). Também esta resposta é de 2012; para obter conselhos mais recentes, consulte askubuntu.com/questions/101591/…
michael
181

A menos que você realmente deseje compilá-lo, a maneira preferida é usar o PPA DeadSnakes para instalar versões do Python que não estão incluídas por padrão:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python2.7

Outras versões, como python2.4ou python3.6, etc. também estão disponíveis.

brousch
fonte
13
Nota do programa: Se você está no 10.04, pode ser necessário instalar o python-software-properties antes de usar o add-apt-repository.
Craig Maloney
3
É recomendado para construir python em seu ambiente local, em vez de instalá-lo a partir de binários pré-construção
pylover
16
1 :)really have a burning desire to compile it yourself
Watt
5
Falta mencionar que: 1. o ppanão é oficialmente aprovado, portanto a maneira mais segura é construir a partir do código-fonte. 2. isso resultará em um python global, para o qual os sudooutros não podem modificar ou instalar pacotes, e não um local. 3. Vários pítons podem ser instalados localmente em diferentes locais, construindo a partir da fonte.
Ioannis Filippidis 9/08/14
2
apt-get install python2.7Isso instala o python2.7 binário em vez do python ... feio !!
Dhawal
26

Continuando a documentar isso para as versões mais recentes do Ubuntu 1 : para o servidor Ubuntu 16.04.1, o Python padrão é a versão 3.5 e o Python 2.7 não é instalado por padrão. Em uma nova instalação (observe que não há nem um pythonexecutável):

$ type python3 python2 python 
python3 is /usr/bin/python3
-bash: type: python2: not found
-bash: type: python: not found

$ python3 --version 
Python 3.5.2

$ python --version 
The program 'python' can be found in the following packages:
 * python-minimal
 * python3
Try: sudo apt install <selected package>

Nota: antes de continuar, você provavelmente desejará fazer uma rápida sudo apt-get update, sudo apt-get upgradee sudo apt-get dist-upgrade(observe exatamente o que esses comandos estão realmente fazendo; estou assumindo uma nova instalação aqui).

A instalação do python 2.7 é tão fácil quanto:

$ sudo apt-get install python2.7

A saída inicial da instalação do python 2.7 é a seguinte:

$ sudo apt-get install python2.7
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7-minimal
Suggested packages:
  python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7 python2.7-minimal
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,735 kB of archives.
After this operation, 15.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc, etc...

Depois de instalar o python 2.7,

$ type python3 python2.7 python3.5 python2 python
python3 is /usr/bin/python3
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5
bash: type: python2: not found
bash: type: python: not found

Mas ainda há um problema, já que você ainda não pode instalar os módulos PyPI via pip- por exemplo, se você deseja um notebook jupyter ou o mais recente scipy ou numpy (etc), você deseja instalar pipe depois os pip installmesmos e ainda voltar para apt-getinstalar todas as dependências do sistema necessárias , como graphviz ou bibliotecas do sistema principal.

$ type pip3 pip2 pip
bash: type: pip3: not found
bash: type: pip2: not found
bash: type: pip: not found

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Então, para instalar o pip, novamente, é tão fácil quanto sudo apt-get install python-pip:

$ sudo apt-cache search -n pip | egrep '^python[0-9]*-pip'
python-pip - alternative Python package installer
python-pip-whl - alternative Python package installer
python3-pip - alternative Python package installer - Python 3 version of the package

Você precisará python-pipdo Python 2.7 pipe python3-pipdo Python 3 pip. A instalação via apt-geté certa para instalar as dependências necessárias; por exemplo, aqui está a saída para instalar o pip2:

$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip-whl
  python-pkg-resources python-setuptools python-wheel python2.7-dev
Suggested packages:
  binutils-doc debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib
  autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib gcc-5-locales libgcc1-dbg
  libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg
  libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg glibc-doc libstdc++-5-doc make-doc python-doc
  python-tk python-setuptools-doc
The following NEW packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip
  python-pip-whl python-pkg-resources python-setuptools python-wheel python2.7-dev
0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded.
Need to get 61.1 MB of archives.
After this operation, 169 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc...

Uma coisa interessante acontece como resultado disso: agora você tem o "padrão" (e o PEP recomendado) python2e python3(que são apenas links simbólicos para python 2.7 e python 3.5):

$ type python3 python2 python python2.7 python3.5 
python3 is /usr/bin/python3
python2 is /usr/bin/python2
python is /usr/bin/python
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5

Você também vai querer sudo apt-get install python3-pip; Antes de instalar, você tem:

$ type pip pip2 pip3
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
-bash: type: pip3: not found

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Após a instalação pip3,

$ sudo apt-get install python3-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-setuptools python3-wheel python3.5-dev
Suggested packages:
  python-setuptools-doc
The following NEW packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-pip python3-setuptools python3-wheel python3.5-dev
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.0 MB of archives.
After this operation, 55.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
...etc...

As versões resultantes:

$ type python python2 python3 pip pip2 pip3
python is /usr/bin/python
python2 is hashed (/usr/bin/python2)
python3 is hashed (/usr/bin/python3)
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
pip3 is /usr/bin/pip3

$ pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

E uma última coisa antes de poder começar a instalar todos os seus módulos PyPI python favoritos: você provavelmente precisará atualizar o próprio pip (tanto o pip2 quanto o pip3, separadamente; além disso, não importa se pipé invocado pelos pythonexecutáveis ​​ou pelo pipexecutáveis, as atualizações reais são armazenadas em /usr/lib):

$ sudo -H python2 -m pip install --upgrade pip
...
$ sudo -H python3 -m pip install --upgrade pip
...

Agora você pode executar pipa versão autônoma ou agrupada em python(via python -m pip {command}).


[1] Recapitulação histórica: o Ubuntu mais antigo tinha apenas o Python 2.6, portanto, todos os vários métodos para instalar o Python 2.7+. Mais tarde, depois que o Python 2.7 foi adicionado aos repositórios públicos, ainda tínhamos o mesmo desafio de instalar o Python 2.7 mais recente com as correções mais recentes, o que era (também) frequentemente necessário. Hoje, a situação é muito melhor / mais simples: os atuais Python 2.7 e 3.5 (basicamente as duas únicas versões da plataforma Python com as quais as pessoas se preocupam) que estão agora nos repositórios públicos são muito estáveis, então agora só precisamos nos preocupar em instalar as versões mais recentes. módulos python , não o python mais recente . Então agora o "problema da versão mais recente" do Python saiu parcialmente dos repositórios de SO apte para o PyPI & pip.)

Michael
fonte
2
Seguindo estas instruções no Ubuntu 16.04.1 LTS, configure com êxito o python 2.7 e o pip assim: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Verificando a versão: $ pip --version -> pip 9.0.1 em /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
Robert Lujo
Perdoe minha ignorância, mas posso saber o que significa "hash" ao mostrar versões do Python?
Falha Scientist
1
@TalhaIrfan É uma boa pergunta (e, se você permitir uma resposta simplificada): quando um comando é digitado no bash (como com a maioria dos shells), o cmd pode ser um alias, função ou arquivo executável encontrado no $PATH. O env var PATHé uma longa lista de diretórios com literalmente milhares de arquivos. Para acelerar a localização do executável, o shell usa uma hashtable em cache para uma pesquisa rápida. Poderia tornar-se obsoleto, por isso "hash" permite que você saiba que ele é "lembrado" este comando mapeado para o arquivo executável unix.stackexchange.com/questions/5609/...
michael
@ Michael Muito obrigado! É uma resposta realmente útil: Breve e direto ao ponto!
Cientista com falha
1
@gaia, você pode querer fazer uma pergunta separada, já que mais e mais perguntas podem ser necessárias para descobrir isso (ou se alguma coisa mudou desde que escrevi isso). Talvez, primeiro verifique se ambos pip (2.7) e pip3(3.x) foram completamente instalado / atualizado, e não apenas o ex - ie, sudo apt-get install python-pip python3-pipe sudo -H python2 -m pip install --upgrade pipe sudo -H python3 -m pip install --upgrade pip ... Ou se ele realmente é um problema de permissão (indicado por "ele trabalha com sudo "), então será um pouco mais difícil rastrear.
30618 Michael
11

12.04

Se você está seguindo a resposta de Achu , o termo libread5-devdeve ser alterado para libreadline-gplv2-dev. Portanto, o comando completo seria:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
Aquele cara
fonte
4

Você também pode fazer o download e instalá-lo via pyenv

#Install Pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
export PATH=~/.pyenv/bin:/usr/local/hadoop/bin/:$PATH
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

#Install Python
pyenv install 2.7.8
pyenv global 2.7.8

pyenv install 3.4.5
pyenv global 3.4.5
Sussurrou
fonte
Esta é a maneira mais limpa de obter uma versão realmente atualizada do Python em uma versão mais antiga do Ubuntu. Também inclui suporte a virtualenv, por meio do pyenv-virtualenvplug - in, facilitando a instalação de aplicativos com diferentes requisitos de módulo sem conflitos.
RichVel
2
Dois avisos sobre o pyenv: (1) ele funciona apenas a partir de um shell bash (ou talvez zsh, mas certamente não é um traço que é / bin / sh no Ubuntu) e (2) requer um shell de login (por exemplo bash --login), que não é sempre fácil de alcançar, por exemplo, da Ansible. Melhor para uso interativo, menos bom para servidores de script.
RichVel 8/17/17
0

Principalmente um espelho dessa resposta com uma introdução aprimorada

Eu recomendaria pyenv . Ele automatiza o processo de compilação, além de instalar as dependências do cabeçalho (veja abaixo). Você pode criar e instalar uma versão nova (ou antiga) do Python simplesmente dizendo pyenv install 3.6.0. Tudo funciona como seu usuário, assim você não precisa se preocupar em estragar o Python usado pelo próprio Ubuntu.

Ao contrário de algumas das opções baseadas em apt-repo (por exemplo, deadsnakes), geralmente funcionará no mesmo dia de um lançamento após um pyenv updateporque você não precisa esperar que outra pessoa o empacote. Veja todas as versões com as quais você pode instalarpyenv install --list

Instale o pyenv

  1. Instale ferramentas e cabeçalhos necessários para construir CPythons (Pythons exóticos como PyPy ou Jython podem ter outras dependências). O Git é usado pelo pyenv, além de permitir a criação / instalação de ramificações de origem, para que você possa instalar o que quer que seja o 3.8 atualmente, ou seja, a ramificação principal do CPython recém-lançada no GitHub:

    sudo apt-get install -y git
    sudo apt-get install -y build-essential libbz2-dev libssl-dev libreadline-dev \
                            libffi-dev libsqlite3-dev tk-dev
    
    # optional scientific package headers (for Numpy, Matplotlib, SciPy, etc.)
    sudo apt-get install -y libpng-dev libfreetype6-dev    
  2. Execute o script do instalador (instala o pyenv e alguns plugins pyenv muito úteis do autor original; veja aqui para mais informações)

    curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  3. Adicione linhas init ao seu ~/.profileou ~/.bashrc(ele menciona no final do script de instalação):

    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
  4. Reinicie seu shell (feche e abra ou exec $SHELL) ou recarregue o script de perfil. (com por exemplo source ~/.bashrc)

Feito!

Configurando um ambiente

Para não tocar no sistema Python (geralmente uma péssima idéia; os serviços no nível do sistema operacional podem depender de algumas versões específicas da biblioteca etc.), crie seu próprio ambiente, é fácil! Ainda melhor, não sudo, por ele ou pipinstala!

  1. Instale sua versão preferida do Python (isso fará o download da fonte e a criará para o usuário, sem necessidade de entrada)

    pyenv install 3.6.0
  2. Torne um virtualenv para que você possa criar outras pessoas mais tarde, se quiser

    pyenv virtualenv 3.6.0 general
  3. Torne-o globalmente ativo (para seu usuário)

    pyenv global general
  4. Faça o que quiser com o Python / pip, etc. É seu.

Se você quiser limpar suas bibliotecas posteriormente, poderá excluir o virtualenv ( pyenv uninstall general) ou criar um novo ( pyenv virtualenv 3.6.0 other_proj). Você também pode ter ambientes ativos por diretório: pyenv local other_projsoltará um .python-versionarquivo em sua pasta atual e sempre que você invocar os utilitários Python ou Python instalados a partir dele ou sob ele, eles serão shimmed pelo pyenv.

Solução de problemas

  • bash: pyenv: command not found, fish: Unknown command 'pyenv'

    1. Verifique o seu $PATH, deve haver uma entrada que termina em algo como .pyenv/bin. Se estiver faltando, certifique-se de seguir os passos 3 e 4 (reinicie o shell) em Instalar pyenv acima.
  • pyenv: no such command 'virtualenv'

    1. Se você não usou o script do instalador, provavelmente instalou apenas o pacote root pyenv. Veja pyenv-virtualenv para obter instruções para adicionar o plugin
    2. Se você usou o script do instalador, verifique se ele aparece pyenv commands.
Nick T
fonte