python é executado de forma diferente com nohup

2

Eu tenho um pacote python que funciona bem quando eu inicio como python -m myproject . No entanto, quando eu inicio como nohup python -m myproject , recebo um ImportError . Além disso, quando eu inicio como nohup python3 -m myproject , ele funciona normalmente.

Parece que o problema é que meu python é aliado ao python3, enquanto o nohup está de alguma forma usando um python não padrão. Por que isso seria?

    
por ericksonla 03.02.2017 / 17:37

1 resposta

2

Seu shell (provavelmente bash) tem um alias atribuído para que, sempre que você digitar python no início de um comando, mude para /usr/bin/python3 . É difícil para mim dizer por que você tem esse pseudônimo. Pode ser que o administrador do sistema queira que todos usem o Python 3 em vez do Python 2 por padrão e essa foi uma tentativa de realizar isso.

Seu /usr/bin/python é um link simbólico para um binário do Python 2. Isso parece bem normal; é comum em muitas distribuições Linux (como Debian) que python se refira ao Python 2, porque o Python 3 ainda não é popular o bastante. Isso nem sempre é o caso; no Arch Linux, python refere-se ao Python 3.

Então, se eu tivesse que adivinhar, eu diria que o gerenciador de pacotes do seu sistema instalou o link simbólico de /usr/bin/python to /usr/bin/python2.7 porque sua política é que as pessoas usem o Python 2 por padrão. Mas alguém que tinha alguma palavra na configuração do seu sistema decidiu que eles queriam que o Python 3 fosse usado por padrão, então eles instalaram esse alias.

Como você pode ver, o alias não funciona o tempo todo. Quando você digita nohup python , o shell não expande seu alias e, em vez disso, apenas passa a string python como um argumento para o comando nohup . O comando nohup tem que descobrir o que significa python , e tudo o que ele faz é procurar em seu PATH; ele não sabe sobre seus aliases de shell. Ele encontrará /usr/bin/python e acabará executando o Python 2 para você.

Você pode ler o manual do seu shell para descobrir quais arquivos ele executa na inicialização (por exemplo, .bashrc e coisas assim). Isso ajudará você a descobrir por que seu shell tem esse alias para o Python 3. Procure uma linha como esta:

alias python=python3

Você pode ler sobre o gerenciador de pacotes do sistema para descobrir como ver quais arquivos pertencem a quais pacotes, e isso pode ajudá-lo a descobrir por que existe um link simbólico para o Python 2. Basta perguntar ao gerenciador de pacotes qual pacote possui o link /usr/bin/python .

    
por 03.02.2017 / 18:44