Usando diferentes versões do Python

20

Plano de fundo :

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

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

Instalei o python 2.5 a partir do código-fonte e, para manter as coisas limpas, usei a opção --prefix=/usr , que instalou o python em /usr/bin/python2.5 e /usr/lib/python2.5 .

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

Gerenciamento de pacotes :

Usando o easy_install, os pacotes são sempre instalados em /usr/lib/python2.6/site-packages/ . Eu baixei setuptools .egg para o 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 o python2.5 não está no meu PYTHONPATH. Eu pensei que a instalação padrão se adicionaria ao PYTHONPATH, mas quando eu escrevo echo $PYTHONPATH no promt, acabei de receber uma linha vazia.

    
por Alex 28.09.2010 / 20:09

5 respostas

20

A maneira recomendada de ter várias versões do Python instaladas é instalar cada uma delas a partir da origem - elas irão coexistir juntas. Você pode então usar 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 da fonte é usar:

sudo make altinstall

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

    
por 15.06.2011 / 22:20
13

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

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
    
por 30.09.2010 / 00:49
5

Using easy_install, packages are always installed in /usr/lib/python2.6/site-packages/

Isso porque o distutils adiciona a linha shebang a todos os scripts que estão sendo instalados. Se você executar o script easy_install diretamente, ele será executado com o interpretador com o qual foi instalado (de acordo com a linha shebang). Qual easy_install está sendo executado depende de seu PATH não PYTHONPATH . Se você deseja instalar um pacote na instância do Python 2.5, execute easy_install especificando o interpretador Python para usar:

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

Estritamente falando, virtualenv não ajuda aqui, pois ele deve ser criado no contexto do base Python, que é exatamente o mesmo problema que com a execução de easy_install . Isso é o que --python argumento de virtualenv é para. Por alguma razão, easy_install não fornece um argumento análogo, portanto, ele deve ser executado com um interpretador específico do Python, conforme mostrado acima.

    
por 19.10.2012 / 17:57
2

Eu também estou usando o Fedora 13 e PYTHONPATH não está definido.

No python, sys.path fornecerá uma lista dos caminhos usados para importar scripts.

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

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

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

    
por 29.09.2010 / 03:22
1

Virtualenv é definitivamente uma dádiva de Deus aqui.

Na minha configuração, tenho a variável de ambiente VIRTUALENV_USE_DISTRIBUTE definida como 1, para que o pacote Distribute mais moderno seja usado em vez de setuptools. Eu 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

Eu 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'

Assim, posso usar py2 para alternar para um padrão do Python 2.6 e py3 para alternar para um padrão do Python 3.2. Digitar idle executará 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 comando pip install .

    
por 21.02.2012 / 17:44