Usando PyQGIS, ArcPy, NumPy, SciPy juntos no prompt de comando do Windows

8

Eu deparei com esse pequeno problema quando procurava acessar instalações python do ArcGIS, QGIS, Anaconda (citadas porque SciPy e NumPy vêm com ele) e a versão 2.7 vs 3. Às vezes, acho mais fácil simplesmente acessar o Windows ' Command Promptpara faça um pouco de trabalho rápido em vez de abrir um programa GIS ou IDE python para acessar o prompt interativo.

Em vez de navegar para cada pasta, definir atalhos ou alternar a PATHvariável de ambiente, eu queria uma maneira diferente de acessar cada instalação python via Command Prompt.

Editar

Os profissionais de GIS que usam python em seu trabalho acabam tendo que acessar cada instalação manualmente para acessar os recursos contidos nela. Em vez de esperar que algo como o ArcMap seja carregado, geralmente é muito mais rápido pressionar o seu winkey -r + cmd e digitar pythonno prompt de comando para iniciar o console python. Se você deseja usar ArcPypara reprojetar um arquivo shapefile, é necessário abrir o console python ao qual está vinculado ArcPy. Se você deseja usar uma ferramenta PyQGISporque não possui a licença ESRI apropriada, precisa encontrar a python.exeque está vinculada a esses módulos. Esta pode ser uma dor quando você está tentando fazer o trabalho em ArcPy, PyQGIS, NumPy, ouSciPy sem ter todas as bibliotecas instaladas de forma coesa, como uma instalação python.

Normalmente, você está vinculado à sua Pathvariável à qual a instalação do python é o padrão enquanto estiver no Command Prompt. Esta pergunta e as respostas a seguir abordam como os profissionais de GIS podem utilizar várias instalações python juntas em um único ambiente. Os IDEs do Python têm como alvo uma única instalação do python e exigem alterações nas configurações para utilizar diferentes. Por exemplo, minha PyScripterinstalação tem como alvo minha instalação do Python no ArcGIS. Portanto, se eu quiser utilizar meus PyQGISmódulos, preciso abrir o QGIS ou alterar as configurações PyScripter.

Ao escrever módulos / scripts completos, faz sentido segmentar um individualmente. Dessa forma, você pode obter algum tipo de conclusão de código. No entanto , quando você está apenas utilizando algumas ferramentas em cada instalação de manipular um conjunto de dados, seria muito mais agradável se você puder consoles python rapidamente aleta / instalações dentro de uma única tela aka o Command Prompt.

Para aqueles que votam para fechar / off-topic ...

Embora isso obviamente se aplique a qualquer coisa à qual a linguagem python esteja anexada , para o usuário pobre de GIS que não pode comprar extensões ESRI para ferramentas de análise de dados, ele serve como uma maneira de simplificar sua vida. Como algumas das respostas mostraram, ser capaz de personalizar mais esse processo, por exemplo, adicionar argumentos aos .cmdarquivos, pode ser de grande utilidade se alguém estiver executando um processo personalizado. Existe a possibilidade de um usuário de GIS / computador mais experiente ser capaz de configurar .cmdarquivos personalizados para executar processos rapidamente, sem precisar se preocupar em lidar com diferentes instalações de software de IDEs / GIS etc.

A única desvantagem da execução de um console python no diretório Command Prompté a perda da conclusão do código. No entanto, se você executar algo o suficiente, como arcpy.AddField_management(), a conclusão do código fica no caminho.

Branco
fonte
2
Gostaria de saber se isso seria mais apropriado no SuperUser. Isso realmente não tem nada a ver com o GIS, além de envolver tangencialmente um tempo de execução usado normalmente no GIS. Certamente, acho que você provavelmente obterá a melhor resposta no SuperUser do que aqui.
jpmc26
1
@ jpmc26. Possivelmente, mas acho que é apropriado para o GIS, uma vez que comparei especificamente o QGIS e o ArcGIS e o uso de várias instalações python juntas no GIS pode ser comum. Ele se expandiu um pouco mais, mas como muitas respostas são codificadas aqui, parece apropriado.
Branco
Geralmente, existem questões deste lado relacionadas a instalações e configurações do software GIS. Isso se aplica da mesma maneira que invocamos 2 instalações python diferentes de 2 componentes de software GIS diferentes, no prompt de comando. Embora possa ser facilmente expandido para outras coisas, o Prompt de Comando, mas a intenção original é configurar o acesso rápido às instalações python do QGIS / ESRI sem problemas.
Branco

Respostas:

9

Vou oferecer uma alternativa que eu acho que é um pouco mais limpa. É inspirado por uma combinação da sugestão de Josef e um padrão comum nos sistemas * nix.

  1. Comece criando um diretório. Este diretório será usado para armazenar arquivos "alias" para cada instalação. Então, algo como C:\Python\aliasesou C:\PythonAliasesvai funcionar.

  2. Em seguida, crie um script para cada instalação. Cada script aliases essencialmente uma das instalações do Python que você precisa referenciar simplesmente chamando de executável. Por exemplo, o conteúdo ficaria assim para a instalação do QGIS:

    @"C:\Program Files\QGIS Dufour\bin\Python.exe" %*

    Salve-o com um nome descritivo na pasta que você criou, como pyqgis.cmdou pyqgis.bat.

    Ele %*passa todos os argumentos que foram fornecidos ao script para o executável Python. Então você pode fazer isso:

    C:\>C:\Python\aliases\pyqgis.cmd -c "print('Hello, world!')"
    Hello, world!
    

    (O @símbolo apenas impede que o prompt de comando faça eco desnecessário no comando.)

  3. Adicione o diretório que contém esses scripts a PATH. Agora você pode chamá-los sem o caminho completo:

    C:\>pyqgis -c "print('Hello, world!')"
    Hello, world!
    

Isso tem várias vantagens, na minha opinião:

  • Não há gerenciamento de várias variáveis ​​de ambiente em todo o sistema. (Porque vamos ser sinceros, a interface do Windows para fazer isso é irritante, na melhor das hipóteses.) Você apenas modifica PATHuma vez. Obter novas instalações PATHou remover antigas é simples gerenciamento de arquivos.
  • Todos os seus aliases estão listados em um só lugar. Descobrir quais nomes você tem disponível é uma lista de diretórios simples. (Isso seria especialmente útil se você não se lembrar do nome.)
  • É menos provável que surjam problemas de cotação
  • Isso reflete um padrão já existente e, portanto, é mais facilmente compreendido / reconhecido. Não é incomum ver aliases como python2e python3no bindiretório em uma máquina * nix. Embora isso não seja exatamente o mesmo, acho que é semelhante o suficiente para que faça algum sentido para alguém saber que isso é feito em sistemas * nix.

Não estou totalmente satisfeito com essa configuração, mas acho que você não pode fazer muito melhor no Windows.

jpmc26
fonte
Eu gosto deste processo. Eu, como a maioria dos usuários típicos do Windows, não me aventuro muito nas variáveis ​​do sistema, no caminho e em outras coisas, a menos que algo me diga. Eu estava apenas tentando pular entre o QGIS python e o Anaconda na noite passada e imaginei meu pequeno atalho. Esta é provavelmente a melhor solução a longo prazo.
Branco
7

Decidi brincar com a System Variablesparte das Environment Variablesconfigurações para ver se posso facilitar o acesso a cada instalação python enquanto estiver no Command Prompt. Eu descobri que poderia adicionar um novo System Variablee chamá-lo do Command Promptpara acessar a instalação python que eu queria.

Alguns exemplos:

Variável = PyQGIS Valor ="C:\Program Files\QGIS Dufour\bin\Python.exe"

Deixei as aspas duplas lá para não precisar citar o espaçamento no Command Promptpara manter toda a string unida como um único argumento

Variável = Anaconda Valor =AnacondaDirectory\Python.exe

Como acesso minhas instalações do scipy / numpy / etc

Variável = Python3 Valor =C:\Python34\Python.exe

O Python 3 inclui um iniciador que permite especificar a versão ... >> py -3para o python 3 ... informações aqui

Para chamar um System Variableno Command Prompt:

Quando estiver no Command Prompt, você pode chamar sua variável digitando %VariableName%no prompt de comando. Para cada instalação do python, ele navegará até o {Directory}\Python.exepara abrir o intérprete interativo. Se você não citou um Valor que possui espaços, é necessário adicionar aspas à sua chamada variável, ex. "%VariableValueWithSpaces%". Sem as aspas, a linha é dividida pelos espaços para que seu programa não inicie.

Tenho certeza de que provavelmente existem maneiras mais fáceis de fazer as coisas, mas achei que esse é um conhecimento útil se você gosta especialmente de usar o Command Promptno Windows. Eu gosto da capacidade de acessar instalações python individuais apenas fornecendo um nome de variável diferente.

Branco
fonte
Como alternativa, o que eu faço: tenho um arquivo .cmd para cada instalação que define o caminho e possivelmente outras coisas no caminho. Então, por exemplo, tenha python34.cmd no seu caminho que contém @set PATH=C:\Python34\;%PATH%. Então, basta digitar python34 disponibilizará esse python.
Josef diz Reinstate Monica
Você quer tê-lo como outra variável de sistema? Ou adicione a localização de python34.cmd à sua Pathvariável?
Branco
Quero dizer que você cria um arquivo cmd que antecederá o local do python.exe ao seu caminho. Você coloca esse arquivo cmd em qualquer lugar do seu caminho. Você pode criar uma nova pasta e anexá-la à variável de caminho. Em seguida, você pode executar python34 a partir de cada shell, porque está no caminho. O Python34.cmd mudará o caminho para que a versão do python desejada seja a primeira coisa no caminho da sessão atual do shell (e de todas as sessões filhas) apenas.
Josef diz Reinstate Monica
Ok, entendi ... Essa também é uma boa idéia, especialmente se você estiver adicionando configurações / alterações extras ao arquivo .cmd.
Branco