Decidí participar en y necesitaba utilizar paquetes para resolver problemas de optimización. Elegí la herramienta de Google or-tools, que es una interfaz para diferentes solucionadores (¿o resolventes?). Contiene varios herramientas de optimización, pero sus creadores afirman la compatibilidad con varios paquetes externos, incluyendo comerciales como Gurobi y CPLEX. Sin embargo, no somos personas adineradas y utilizaremos los gratuitos SCIP y GLPK (de un desarrollador nacional, por cierto). Para mi sorpresa, no encontré ninguna instrucción sobre cómo hacer que toda esta maravilla funcione en un entorno virtual de Python, ni en el espacio de Internet de nuestro segmento ni en el de habla inglesa, así que tuve que trabajar un poco. Para aquellos que tienen mucha prisa, lean de inmediato , a los demás les ofrezco conocer la desafiante calidad de mi grafomanía, que describe las peripecias de la instalación del software de Google. Sí, me olvidé de decir que se instaló todo en Manjaro Linux.

Primeros pasos
Los tres paquetes existen en el repositorio de Python, así que los instalamos a través de pip.
Cada uno de ellos tiene su propia interfaz, y or-tools fue elegido precisamente para probar diferentes paquetes sin reescribir sustancialmente el programa, por lo que la tarea es que or-tools conecte estos solucionadores y permita ejecutarlos a través de él. ¿Y qué creen? El or-tools instalado a través de pip no ve a los solucionadores instalados a través de pip, y ellos no lo ven a él (¿quién lo habría pensado?). Así que tenemos que ver qué dicen en .
La documentación dice que se debe compilar desde el código fuente para que or-tools pueda conectar paquetes externos. Intentamos compilar y no obtenemos resultados, porque no se ven los solucionadores instalados a través de pip.
Por lo tanto, las formas más simples de instalar todos los paquetes a través de pip no funcionan, porque or-tools no detecta a los solucionadores, los solucionadores no instalan bibliotecas como or-tools lo quiere, todos lanzan errores, te llaman tonto y se ríen de ti.
Luego en dicen que hay que compilar los solucionadores desde el código fuente, luego compilar el propio or-tools desde el código fuente. ¡Dicho y hecho! Instalé SCIP, instalé GLPK, pero surge una pregunta no descrita en la documentación: ¿cómo instalar or-tools en un entorno virtual?
El único comando especificado en la documentación, make python, instala el paquete globalmente en el sistema (¿increíble, verdad?).
Sin embargo, tuve suerte: en el proceso de búsqueda ingenieril, utilizando el método de los monos infinitos, accidentalmente escribí el comando make help y me mostró una lista de todas las opciones de compilación de or-tools, entre las cuales había una posibilidad de compilar el paquete wheel. Esa es la comando make python_package, por cierto (la repetiré al final). Así que, ¿es el momento de compilar y ejecutar?

Buscando un problema
Nada funciona en la etapa de compilación de or-tools, está quejándose de bibliotecas GLPK defectuosas.

La compilación con SCIP con los parámetros de la documentación se completa con éxito, pero or-tools se niega a funcionar en el momento de la importación.

No encontré soluciones a estos problemas por mí mismo, así que me dirigí a GitHub para preguntar a los desarrolladores por qué la instalación según sus instrucciones da errores en su código.

Hmm, gracias por las aclaraciones
Mientras esperaba una respuesta en GitHub, estuve buscando en internet, con la esperanza de encontrar algo que me ayudara. Y sorprendentemente, encontré algo. Era el líder del proyecto, donde escribió sobre cómo vincular GLPK con or-tools. ¡Y este método finalmente funcionó! Ahora, si compilo todo sin SCIP, pero con GLPK, puedo trabajar incluso con eso. Ya hay progreso.
Sin embargo, el líder del equipo de or-tools no aconsejaba usar GLPK, diciendo que los resultados no son muy buenos, y todavía quería vencer a SCIP y hacer que funcionara. Un blog vecino me hizo pensar que el paquete de Google funciona con versiones específicas. Miramos y allí vemos una clara indicación de la versión 6.0.0. A pesar de que en el makefile se indica la versión 6.0.2, intentamos instalar una versión anterior y ¡voilà!
Y ahora una vez más, la secuencia de acciones que funciona.
Secuencia de instalación
- Descargar el archivo zip de SCIP, asegurándose de que se indica claramente el soporte para la versión que estás descargando (en mi caso ) y descomprimir.
- Descargar GLPK (en el momento de este post, la última versión es 4.65) y descomprimir.
- Instalar SCIP con el comando
make GMP=false READLINE=false TPI=tny ZIMPL=false scipoptlib install INSTALLDIR=/scipoptsuite-6.0.0 - Instalar GLPK con el comando:
./configure --prefix= --with-pic --enable-shared make make install - Descargar OR-Tools desde GitHub
git clone https://github.com/google/or-tools - Instalar OR-Tools con los comandos:
make third_party make python_packageSi el último comando no funciona, instala wheel con el comando:
pip install wheel - Activa el entorno virtual, dirige a la carpeta con el paquete de Python y instálalo desde allí.
Si necesitas instalarlo no en un entorno virtual, sino de manera global para todo el sistema en lugar de:
make python_packageejecute el comando:
Telegram + 1C + Webhooks + Apache + Certificado autofirmado
Fuente: habr.com
