Mudei minha versão para Python - mas ela não “pegou” em todos os lugares?

1

Ubuntu grátis. Eu tenho um problema estranho que eu passei um tempo tentando depurar, e depois eu procurei bastante por dados, sem sorte.

Eu tenho um servidor relativamente novo rodando o Lucid Lynx e estou tentando mudar a versão padrão do Python para 2.7. Eu testei todos os aplicativos que estou executando e eles parecem rodar bem no 2.7 - e não é um servidor de missão crítica, então posso falhar e voltar se quiser.

Eu fiz meu dever de casa, instalei o 2.7, mudei os links em / usr / bin e editei meu / usr / share / python / debian_defaults para fazer o python2.7 da versão padrão. Então eu tentei "python" na linha de comando para "root" e para "alguma conta de usuário aleatória" e peguei o python 2.7 e tirei minhas mãos.

Isso foi há alguns meses e tudo funcionou bem até hoje ...

Eu tentei executar um daemon do Python - mas ele falhava misteriosamente. Eu segui para um pacote que não foi instalado - mas foi ...

Depois de alguma depuração, descobri que, na verdade, quando executo um script Python como daemon, ele executa o Python 2.6.5 - mas se eu executar o mesmo script na linha de comando, ele executará o Python 2.7.2 - e eu É claro que não instalamos a nova biblioteca para o Python 2.6. (Estou usando a biblioteca daemon do Python para iniciar o script como um daemon ...)

Mas todos os meus scripts começam com #! / usr / local / bin / python, a versão que eu instalei recentemente, e /usr/local/bin/python --version retorna 2.7.2. Na verdade, eu mudei o #! linha para apontar explicitamente para o python 2.7 e ainda falha exatamente da mesma maneira.

Mais tarde, descobri que se eu executasse o programa em pdb, o depurador python, também obteria o 2.6 como a versão.

Acho que a chave é que nem o pdb nem o daemon runner prestam atenção ao #! linha - mas eu não posso ir mais longe do que isso.

Sua gentil ajuda é solicitada com gratidão.

EDIT: Algumas boas sugestões abaixo - se o meu karma Stackoverflow chegou aqui, eu iria votá-las - mas não bons resultados (veja os comentários abaixo). Resolução: despeje o Python 2.6.

    
por Tom Swirly 13.03.2012 / 02:34

4 respostas

1

Experimente sudo update-alternatives --config python

O Ubuntu / Debian possui um sistema alternativo que utiliza no caso de existirem vários programas que fazem a mesma coisa. Veja man 8 update-alternatives para mais informações.

    
por overdamped 13.03.2012 / 03:19
0

Eu não tenho uma bala de prata, mas tenho algumas sugestões. Quando eu executo o seguinte comando:

$ ls -al /usr/bin/pdb*

Eu entendo isso (estou no Ubuntu 11.10):

lrwxrwxrwx 1 root root  6 2012-02-16 20:53 /usr/bin/pdb -> pdb2.7
lrwxrwxrwx 1 root root 23 2012-02-01 09:17 /usr/bin/pdb2.5 -> ../lib/python2.5/pdb.py
lrwxrwxrwx 1 root root 23 2011-08-11 06:04 /usr/bin/pdb2.6 -> ../lib/python2.6/pdb.py
lrwxrwxrwx 1 root root 23 2012-02-16 20:53 /usr/bin/pdb2.7 -> ../lib/python2.7/pdb.py

Portanto, para o pdb, pode ser necessário alterar o link simbólico.

Você também pode tentar este comando (update-alternatives está no repositório, se ainda não estiver instalado em sua máquina):

sudo update-alternatives --config python

Isso deve esclarecer qual é a sua versão padrão do python e permitir que você a redefina.

Finalmente, há virtualenv e python-brew para controlar explicitamente a versão do python que você executa em um sistema com várias versões. Eu não tenho nenhuma experiência com python-brew, mas eu gosto da maneira como os pacotes virtualenv empacotam perfeitamente ambientes python. Se você não estiver familiarizado com isso, este artigo pode ser de interesse:

link

    
por klenwell 13.03.2012 / 03:21
0

Eu estou supondo que você está tentando começar a jogar bem com sua atualização python. Você já tentou /usr/bin/python /opt/myservice.py ? Como outros já mencionaram, update-alternatives é o caminho que você deve fazer. Eles podem não ter aplicado para upstart embora.

    
por RobotHumans 13.03.2012 / 03:34
0

Eep. Você está indo bem fora do mundo das coisas que você pode mudar sem quebrar sério:)

Sim, você pode compilar e instalar todos os pythons que quiser em /usr/local , sem nenhum problema. Se você quer que um deles seja o comando python , você pode fazer isso também, colocando tal link simbólico em /usr/local/bin/ .

Você realmente não quer tocar em /usr/share/python/debian_defaults ou mexer em qualquer um dos links simbólicos em /usr/bin .

Você está executando o daemon do upstart? O /usr/local/bin talvez não esteja no seu PATH ?

    
por tumbleweed 13.03.2012 / 05:24