Usando versões diferentes do Python

21

Antecedentes :

Desde que desenvolvo programas python que devem ser executados em diferentes versões python, instalei versões diferentes do python no meu computador.

Estou usando o FC 13, então ele veio com o python 2.6 pré-instalado no /usr/bin/python2.6e /usr/lib/python2.6.

Eu instalei o python 2.5 a partir da fonte e, para manter as coisas organizadas, usei a --prefix=/usropção, que instalou o python no /usr/bin/python2.5e /usr/lib/python2.5.

Agora, quando executo pythonmeu prompt, mostro que estou usando a versão 2.5. No entanto, estou tendo alguns problemas com a instalação.

Gerenciamento de pacotes :

Usando easy_install, os pacotes são sempre instalados no /usr/lib/python2.6/site-packages/. Eu baixei setuptools.egg para python 2.5 e tentei instalá-lo, mas isso me dá um erro:

/usr/lib/python2.5/site-packages does NOT support .pth files

Parece que python2.5 não está no meu PYTHONPATH. Eu pensei que a instalação padrão se acrescentaria ao PYTHONPATH, mas quando eu escrevo echo $PYTHONPATHno prompt, recebo apenas uma linha vazia.

Alex
fonte

Respostas:

20

A maneira recomendada de ter várias versões do Python instaladas é instalá-las a partir da fonte - elas coexistem alegremente. Você pode usar o virtualenv com o intérprete apropriado para instalar as dependências necessárias (usando pip ou easy_install). O truque para facilitar a instalação de vários intérpretes a partir da fonte é usar:

sudo make altinstall

em vez do "sudo make install" mais usual. Isso adicionará o número da versão ao executável (para que você tenha python-2.5, python-2.6, python-3.2 etc), evitando assim qualquer conflito com a versão do sistema do Python.

VPeric
fonte
2
Altinstall + virtualenv = nirvahna de desenvolvimento python. Obrigado!
Alex
13

Isso soa como um aplicativo perfeito para o virtualenv , uma ferramenta muito popular para criar ambientes isolados em Python. Este é um comando de amostra para especificar a versão do Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
Adam Byrtek
fonte
Eu não acho que virtualenvé a solução neste caso. Veja minha resposta.
Piotr Dobrogost 19/10/12
5

Usando easy_install, os pacotes são sempre instalados no /usr/lib/python2.6/site-packages/

Isso porque o distutils adiciona linha shebang a todos os scripts que estão sendo instalados. Se você executar o easy_installscript diretamente, ele será executado com o intérprete com o qual foi instalado (de acordo com a linha shebang). O que easy_installestá sendo executado depende do seu PATHnão PYTHONPATH. Se você deseja instalar um pacote na instância do Python 2.5, execute a easy_installespecificação do interpretador Python para usar:

/usr/bin/python2.5/python easy_install ...

A rigor virtualenv, não ajuda aqui, pois deve ser criado no contexto do Python base, que é exatamente o mesmo problema da execução easy_install. É para isso que serve o --pythonargumento virtualenv. Por alguma razão easy_install, não fornece argumento análogo; portanto, ele deve ser executado com um interpretador Python específico, como mostrado acima.

Piotr Dobrogost
fonte
É a minha primeira resposta aqui e espero o primeiro distintivo Necromante também :) #
Piotr Dobrogost 19/10/12
Muito boa explicação, obrigado! Crachá de Necromancer bem merecido;)
Alex
2

Também estou usando o Fedora 13 e PYTHONPATHnão está definido.

No python, sys.pathvocê fornecerá uma lista dos caminhos usados ​​para importar scripts.

Não estou familiarizado com como easy_installdecide seu diretório de destino, mas tenho certeza de que haveria um argumento de linha de comando que você poderia fornecer.

Tente especificar em qual versão do python executar easy_install, precedendo seu comando com o caminho completo para o python desejado.

Verifique também se easy_installhá um link simbólico no bin para um script em uma versão python que você instalou.

Bkersten
fonte
1

Virtualenv é definitivamente uma dádiva de Deus aqui.

Na minha instalação, tenho a variável de ambiente VIRTUALENV_USE_DISTRIBUTEdefinida como 1, para que o pacote Distribute mais moderno seja usado em vez de setuptools. Criei ambientes virtuais para as duas versões do Python no meu sistema da seguinte forma:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

Criei três aliases em .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Portanto, eu posso usar py2para alternar para o padrão do Python 2.6 e py3para o padrão do Python 3.2. A entrada idleserá executada conforme a versão do IDLE apropriada para o ambiente virtual em que estou.

A instalação de pacotes em um desses ambientes virtuais geralmente envolve apenas um pip installcomando.

pitoneiro
fonte