Para executar o Windows Python a partir do Cygwin, sempre faça isso:
$ cygstart python
Nunca faça isso:
$ python -i
Isso também se aplica ao Windows IPython. Sempre faça isso:
$ cygstart ipython
Nunca faça isso:
$ ipython -i
Antes de entendermos o porquê, vamos falar sobre ${PATH}
.
Python e ${Path}
: juntos no fim!
A resposta acima assume que o python
do seu atual ${PATH}
é o Windows nativo, e não a versão do Python instalada pelo Cygwin. Se este for o caso, o caminho absoluto do seu Windows Python deve ser passado explicitamente para cygstart
. Por exemplo:
$ cygstart /cygdrive/c/Miniconda3/python.exe
Se você executar o Windows Python com alguma semelhança de frequência, provavelmente desejará tornar esse seu definitivo python
. Se você instalou uma distribuição popular do Python (por exemplo, Anaconda, Miniconda, Enthought Canopy), isso significa que você. Para isso, prefixar ${PATH}
pelo caminho absoluto do diretório que contém python.exe
na inicialização do shell (por exemplo, em ~/.bashrc
). Por exemplo:
# Stash this somewhere.
export PATH="/cygdrive/c/Miniconda3:${PATH}"
O que há de errado com python -i
ou cmd.exe
, Chummer?
Ao espiar ainda outra recomendação bem intencionada para executar o Windows Python via python -i
de dentro do Cygwin ou python
de dentro de um terminal que não seja o Cygwin, balancei a cabeça apenas.
Não. Não. Não. Em ambos os casos, você está fazendo errado.
No caso de executar python -i
de dentro do Cygwin, você perde as ligações sãs do teclado (por exemplo, > e < Down > para ciclo através do histórico do REPL, < Ctrl-D > para terminar o REPL) e, talvez mais importante, o buffer de saída.
No caso de rodar python
dentro de um terminal que não seja o Cygwin, você perde o Cygwin. Você usa o Cygwin por um motivo - presumivelmente porque você prefere a compatibilidade com POSIX e tudo o que envolve (por exemplo, um shell sã) para a alternativa convencional do Windows.
O que há de tão quente em fumar cygstart
, afinal?
Não há razão para abandonar o Cygwin. Existe, porém, uma razão para que, em vez disso, seja executada uma aplicação nativa do Windows e, portanto, o Windows Python, a partir do Cygwin, como um processo nativo do Windows, e não como um processo Cygwin compatível com POSIX. O que não é.
Insira cygstart
.
Este utilitário padrão do Cygwin é (bastante confuso) sobrecarregado para interagir de diversas maneiras marginalmente interessantes com aplicativos nativos do Windows , caminhos e URIs. Para o nosso propósito, passar cygstart
o nome de um comando no comando ${PATH}
é executado como um processo nativo do Windows, preservando a sintaxe e a semântica do shell do Windows na presença do Cygwin.
tl; dr
Aplicativos nativos do Windows - incluindo o Windows Python e o IPython - devem sempre ser executados no Cygwin por meio do comando cygstart
.