Várias versões de Python na mesma máquina?

87

Existe documentação oficial no site do Python em algum lugar, sobre como instalar e executar várias versões do Python na mesma máquina no Linux?

Posso encontrar zilhões de postagens e respostas em blogs, mas gostaria de saber se existe uma maneira oficial "padrão" de fazer isso.

Ou tudo isso depende do sistema operacional?

Andriy Drozdyuk
fonte

Respostas:

79

Acho que é totalmente independente. Basta instalá-los e você terá os comandos, por exemplo, /usr/bin/python2.5e /usr/bin/python2.6. Link /usr/bin/pythonpara aquele que você deseja usar como padrão.

Todas as bibliotecas estão em pastas separadas (com o nome da versão) de qualquer maneira.

Se você deseja compilar as versões manualmente, use o arquivo leia-me do código-fonte do Python:

Instalando várias versões

Em sistemas Unix e Mac, se você pretende instalar várias versões do Python usando o mesmo prefixo de instalação (argumento --prefix para o script de configuração), você deve tomar cuidado para que seu executável python principal não seja sobrescrito pela instalação de uma versão diferente. Todos os arquivos e diretórios instalados usando "make altinstall" contêm a versão principal e secundária e podem, portanto, viver lado a lado. "make install" também cria $ {prefix} / bin / python3 que se refere a $ {prefix} /bin/pythonX.Y. Se você pretende instalar várias versões usando o mesmo prefixo, você deve decidir qual versão (se houver) é a sua versão "primária". Instale essa versão usando "make install". Instale todas as outras versões usando "make altinstall".

Por exemplo, se você deseja instalar o Python 2.5, 2.6 e 3.0 com 2.6 sendo a versão primária, você executaria "make install" no diretório de compilação 2.6 e "make altinstall" nos outros.

Felix Kling
fonte
5
Obrigado, o "make install" no primário e "make altinstall" no secundário deixou isso claro.
Andriy Drozdyuk
4
Alguma maneira correta de compartilhar bibliotecas entre versões? Digamos que eu tenha o MySQLdb para 2.6 e instalei o 2.7. como faço para disponibilizar o MySQLdb para 2.7 também?
romeroqj
Todas as informações fornecidas são para Unix / Linux e Mac OS, então claramente não "totalmente independentes" do sistema operacional, como o OP pede. Para o Windows, o processo é bem diferente, mas igualmente fácil.
wwwayne
28

No Windows, eles são instalados em pastas separadas, "C: \ python26" e "C: \ python31", mas os executáveis ​​têm o mesmo nome "python.exe".

Eu criei outra pasta "C: \ python" que contém "python.bat" e "python3.bat" que servem como invólucros para "python26" e "python31" respectivamente e adicionei "C: \ python" à PATHvariável de ambiente.

Isso me permite digitar pythonou python3em meus wrappers .bat Python para iniciar o que desejo.

No Linux, você pode usar o #!truque para especificar qual versão deseja que um script use.

o homem de lata
fonte
O que adicionar a esses arquivos .bat?
Aidis
Não vou votar a favor desta resposta apenas porque é muito específico do Windows e a pergunta era relacionada ao Linux, caso contrário, uma ótima informação.
Jim Aho
2
O usuário não existe mais, eu realmente queria aquele arquivo em lote
Wargog
6
Isso é o que eu coloquei no meu arquivo python.bat (apenas uma linha): "c: \ python27 \ python% *" Então eu apenas o invoco normalmente, ou seja, 'python test.py' e o% * pegará todos os argumentos e passe-o para o executável real. Você também pode usar o mklink diretamente na pasta C: \ bin. Veja aqui os detalhes: stackoverflow.com/a/13953614/865929
Sean Glover
1
Agora você pode apenas executar py -3.4ou py -2.7e o programa py(abaixo C:\Windows) escolherá esse interpretador Python (assumindo que esteja instalado).
JamesThomasMoon1979
12

Atualização 2019: usando asdf

Atualmente, eu sugiro usar asdf para instalar várias versões de interpretadores Python lado a lado.

Nota 1: asdffunciona não apenas para Python, mas para todas as principais linguagens.

Nota2: asdffunciona bem em combinação com gerenciadores de pacotes populares, como pipenv e poesia .

Se você tiver o asdf instalado, poderá facilmente baixar / instalar novos interpretadores Python:

# Install Python plugin for asdf:
asdf plugin-add python

# List all available Python interpreters:
asdf list-all python

# Install the Python interpreters that you need:
asdf install python 3.7.4
asdf install python 3.6.9
# etc...

# If you want to define the global version:
asdf global python 3.7.4

# If you want to define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
asdf local python 3.7.4

Resposta antiga: Instale Python da fonte

Se você precisar instalar várias versões do Python (ao lado da principal) em Ubuntu / Mint : (deve funcionar de forma semelhante em outros Unixs).

1) Instale os pacotes necessários para compilação de origem

$ 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

2) Baixe e extraia a versão desejada do Python

Baixe o código-fonte Python para Linux como tarball e mova-o para /usr/src.

Extraia o pacote baixado no local. (substitua os 'x's pela sua versão baixada)

$ sudo tar xzf Python-x.x.x.tgz

3) Compilar e instalar o código-fonte Python

$ cd Python-x.x.x
$ sudo ./configure
$ sudo make altinstall

Seu novo bin Python agora está localizado em /usr/local/bin. Você pode testar a nova versão:

$ pythonX.X -V
Python x.x.x
$ which pythonX.X
/usr/local/bin/pythonX.X

# Pip is now available for this version as well:
$ pipX.X -V
pip X.X.X from /usr/local/lib/pythonX.X/site-packages (python X.X)
Rotareti
fonte
6

Como instalar diferentes versões do Python depende do sistema operacional.

No entanto, se você estiver no Linux, pode usar uma ferramenta como pythonbrew ou pythonz para ajudá-lo a gerenciar e alternar facilmente entre as diferentes versões.

Rodrigue
fonte
Eu instalei em um mac com configure / make altinstall. Sem problemas até agora.
Evgeny,
É possível fornecer $user1outra versão do python diferente do padrão?
Roland
1
@Roland pyenvtrabalhará para isso. Do leia-me no link postado acima:> [Permite] que você altere a versão global do Python por usuário.
theeddieh
5

Estou usando o Mac e a melhor maneira que funcionou para mim é usando o pyenv!

Os comandos abaixo são para Mac, mas muito semelhantes ao Linux (veja os links abaixo)

#Install pyenv
brew update
brew install pyenv

Digamos que você tenha o python 3.6 como sua versão primária no seu mac:

python --version 

Resultado:

Python <your current version>

Agora instale o python 3.7, primeiro liste todos

pyenv install -l

Vamos pegar 3.7.3:

pyenv install 3.7.3

Certifique-se de executá-lo no Terminal (adicione-o a ~ / .bashrc ou ~ / .zshrc):

export PATH="/Users/username/.pyenv:$PATH"
eval "$(pyenv init -)"

Agora vamos executá-lo apenas no terminal / shell aberto :

pyenv shell 3.7.3

Agora corra

python --version

Resultado:

Python 3.7.3

E não menos importante removê- lo no shell / iTerm aberto:

pyenv shell --unset

Você pode executá-lo globalmente ou localmente também

Kohn1001
fonte
1

Gerenciadores de pacotes - nível de usuário

Para um gerenciador de pacotes que pode instalar e gerenciar várias versões do python, estas são boas opções:

  • pyenv - apenas capaz de instalar e gerenciar versões de python
  • asdf - capaz de instalar e gerenciar muitos idiomas diferentes

As vantagens para esses gerenciadores de pacotes é que pode ser mais fácil configurá-los e instalar várias versões do python com eles do que instalar o python a partir do código-fonte. Eles também fornecem comandos para alterar facilmente a (s) versão (ões) python disponível (is) usando shims e definindo a versão python por diretório.

Esta desvantagem é que, por padrão, eles são instalados no nível do usuário (dentro do seu diretório pessoal) e requerem um pouco de configuração no nível do usuário - você precisará editar seus arquivos ~/.profilee / ~/.bashrcou semelhantes. Isso significa que não é fácil usá-los para instalar várias versões de python globalmente para todos os usuários. Para fazer isso, você pode instalar a partir do código-fonte junto com a versão python existente do sistema operacional.


Instalação da fonte - em todo o sistema

Você precisará de privilégios de root para este método.

Consulte a documentação oficial do Python para compilar a partir do código-fonte para considerações e opções adicionais.

/usr/localé o local designado para um administrador de sistema instalar software compartilhado (em todo o sistema), portanto, seus subdiretórios são um bom lugar para baixar o código-fonte python e instalar. Veja a seção 4.9 do Padrão de Hierarquia de Arquivos da Linux Foundation .

Instale todas as dependências de compilação. Em sistemas baseados em Debian, use:

apt update
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev

Escolha qual versão do Python você deseja instalar. Veja a página Python Source Releases para uma lista.

Baixe e descompacte o arquivo /usr/local/src, substituindo X.X.Xabaixo pela versão python (ou seja 3.8.2).

cd /usr/local/src
wget https://www.python.org/ftp/python/X.X.X/Python-X.X.X.tgz
tar vzxf Python-X.X.X.tgz

Antes de compilar e instalar, defina a CFLAGSvariável de ambiente com as sinalizações do compilador C necessárias (consulte a makedocumentação do GNU ). Isso geralmente não é necessário para uso geral, mas se, por exemplo, você for criar um plug-in uWSGI com esta versão do python, convém definir os sinalizadores,, -fPICcom o seguinte:

export CFLAGS='-fPIC'

Altere o diretório de trabalho para o diretório de origem python descompactado e configure a construção. Você provavelmente vai querer usar a --enable-optimizationsopção no ./configurecomando para otimização guiada por perfil . Use --prefix=/usr/localpara instalar os subdiretórios apropriados ( /usr/local/bin, /usr/local/lib, etc.).

cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local

Compile o projeto makee instale-o make altinstallpara evitar a substituição de arquivos ao instalar várias versões. Veja o aviso nesta página da documentação de compilação do Python.

make -j 4
make altinstall

Então, você deve ser capaz de executar suas novas versões de python e pip com pythonX.Xe pipX.X(ou seja, python3.8e pip3.8). Observe que se a versão secundária de sua nova instalação for igual à versão do sistema operacional (por exemplo, se você estava instalando o python3.8.4 e o sistema operacional usava o python3.8.2), você precisaria especificar o caminho completo ( /usr/local/bin/pythonX.X) ou definir um alias para usar esta versão.

gato Azul
fonte
0

É fortemente dependente do sistema de distribuição de pacotes que você usa. Por exemplo, com MacPorts, você pode instalar vários pacotes Python e usar o pyselectutilitário para alternar o padrão entre eles com facilidade. Em todos os momentos, você pode chamar os diferentes interpretadores Python, fornecendo o caminho completo, e você pode vincular todas as bibliotecas e cabeçalhos Python, fornecendo os caminhos completos para eles.

Portanto, basicamente, seja qual for a maneira como você instala as versões, contanto que mantenha suas instalações separadas, você poderá executá-las separadamente.

Seth Johnson
fonte
O que é um sistema de distribuição de pacotes?
Andriy Drozdyuk
@drozzy: Por exemplo RPM usado por OpenSuse ou apt usado por distribuições baseadas em Debian ou portage usado por Gentoo etc. Basicamente, é uma ferramenta para instalar software.
Felix Kling
0

Eu fiz isso com o navegador anaconda. Eu instalei o anaconda navigator e criei dois ambientes de desenvolvimento diferentes com diferentes versões de python

e alternar entre diferentes versões de python alternando ou ativando e desativando ambientes.

primeiro instale o navegador anaconda e, a seguir, crie ambientes.

veja a ajuda aqui sobre como gerenciar ambientes

https://docs.anaconda.com/anaconda/navigator/tutorials/manage-environments/

Aqui está o vídeo para fazer isso com conda

https://youtu.be/EGaw6VXV3GI

mohitesachin217
fonte