Decidi participar de e precisava usar pacotes para resolver problemas de otimização. Escolhi a ferramenta or-tools do Google, que serve como uma interface para diferentes solucionadores. Ela contém várias ferramentas de otimização, mas os criadores afirmam dar suporte a diversos pacotes externos, incluindo os comerciais Gurobi e CPLEX. No entanto, somos pessoas com orçamento limitado, e usaremos os gratuitos SCIP e GLPK (de um desenvolvedor nacional, aliás). Para minha surpresa, não encontrei nenhuma instrução sobre como fazer toda essa maravilha funcionar em um ambiente virtual Python, tanto nos conteúdos em nosso idioma quanto nos de língua inglesa, e tive que me esforçar um pouco. Para aqueles que estão com pressa, leiam diretamente , aos demais, sugiro conhecer a minha grafomania de qualidade duvidosa, que descreve as peripécias da instalação do software do Google. Ah, e eu esqueci de mencionar que tudo foi instalado no Manjaro Linux.

Primeiros passos
Todos os três pacotes estão disponíveis no repositório do Python, então vamos instalá-los via pip.
Cada um deles tem sua própria interface, e o or-tools foi escolhido justamente para permitir testes com diferentes pacotes, sem a necessidade de reescrever muito o programa. Portanto, o objetivo é que o or-tools conecte esses solucionadores e permita sua execução através dele. E o que vocês acham? O or-tools instalado via pip não reconhece os solucionadores instalados também via pip, e eles não o reconhecem (quem diria). Então, precisamos dar uma olhada no que dizem as .
documentações, que comentam que é necessário compilar a partir do código-fonte para que o or-tools reconheça pacotes externos. Tentamos compilar, mas não dá certo, porque os solucionadores instalados via pip não são visíveis.
Consequentemente, as maneiras mais simples de instalar todos os pacotes via pip não funcionam, pois o or-tools não puxa os solucionadores, os solucionadores não instalam as bibliotecas como o or-tools deseja, todos lançam erros, chamam você de burro e riem de você.
Em seguida, nas dizem que é necessário compilar os solucionadores a partir do código-fonte e, em seguida, compilar o próprio or-tools a partir do código-fonte. Fui e fiz! Instalei o SCIP, instalei o GLPK, mas surgiu uma dúvida não descrita na documentação: como instalar o or-tools em um ambiente virtual.
O único comando documentado make python instala o pacote globalmente no sistema (surpreendente, não é?).
No entanto, eu tive sorte: durante uma busca de engenharia pelo método dos macacos infinitos, eu acidentalmente digitei o comando make help, e recebi uma lista de todas as opções de compilação do or-tools, entre as quais estava a opção de compilar o pacote wheel. Esse é o comando make python_package, só para lembrar (eu vou repeti-lo no final). Então, é hora de compilar e rodar?

Procurando o problema
Nada funciona na etapa de compilação do or-tools, ele reclama sobre bibliotecas GLPK ruins.

A compilação com SCIP usando os parâmetros da documentação é bem-sucedida, mas o or-tools ainda se recusa a funcionar no momento da importação.

Não encontrei soluções para esses problemas por conta própria, então fui ao GitHub perguntar aos desenvolvedores por que a instalação seguindo as instruções deles gera erros em algum lugar do código deles.

Hmm, obrigado pelos esclarecimentos
Enquanto esperava a resposta no GitHub, fiquei pesquisando na internet, na esperança de encontrar algo que me ajudasse. E, para minha surpresa, encontrei. Era o líder do projeto, onde ele escreveu sobre como conectar o GLPK ao or-tools. E esse método finalmente funcionou! Agora, se eu compilar tudo sem SCIP, mas com GLPK, é possível trabalhar com isso. Já é um progresso.
No entanto, o líder da equipe do or-tools não recomendou usar o GLPK, dizendo que os resultados não são bons, e ainda quero vencer o SCIP e fazê-lo funcionar. O blog vizinho me fez pensar que o pacote do Google funciona com versões específicas. Vamos olhar e vemos uma indicação clara da versão 6.0.0. Apesar de que no makefile está indicada a versão 6.0.2, tentamos instalar uma versão mais antiga e voila!
E agora, mais uma vez a sequência de ações que funciona.
Sequência de instalação
- Baixe o arquivo do SCIP, certificando-se de que o suporte para a versão que você está baixando está claramente indicado (no meu caso, ) e descompacte-o.
- Baixe o GLPK (na época da postagem a versão mais recente era 4.65) e descompacte.
- Instale o SCIP com o comando
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Instale o GLPK com o comando:
. /configure --prefix= --with-pic --enable-shared make make install - Baixe o OR-Tools do GitHub
git clone https://github.com/google/or-tools - Instale o OR-Tools com os comandos:
make third_party make python_packageSe a última comando não funcionar, instale o wheel com o comando:
pip install wheel - Ative o ambiente virtual, vá para a pasta do pacote Python e instale-o a partir de lá.
Se precisar instalar não em um ambiente virtual, mas globalmente para todo o sistema, em vez de:
make python_packageexecute o comando:
make python
Fonte: habr.com
