Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

375
Visualizações
Prevención de colisiones de espacios de nombres entre paquetes de Python privados y basados en pypi

Tenemos más de 100 paquetes privados y hasta ahora hemos estado usando s3pypi para configurar un pypi privado en un depósito s3. Nuestros paquetes privados tienen dependencias entre sí (y en los paquetes públicos), y es (por supuesto) importante que nuestras canalizaciones de GitLab encuentren la última versión funcional de los paquetes en los que se basa. Es decir, no estamos interesados en el último código registrado. Creamos nuevas ruedas solo después de las pruebas y qa se ha ejecutado contra un empuje para dominar (que es una forma larga de explicar que los requisitos -e <vcs> no funcionarán).

Nuestra configuración funciona muy bien hasta que alguien crea un nuevo paquete público en el pypi oficial que oculta uno de los nombres de nuestros paquetes. Podemos forzar la elección de nuestro paquete privado aumentando el número de versión para que sea más alto que el nuevo paquete en pypi.org, o cambiando el nombre de nuestro paquete a algo que aún no se haya tomado en pypi.org.

Obviamente, esta es una solución pirateada y frágil, pero aparentemente la funcionalidad es así por diseño .

Después de la configuración inicial del depósito, s3pypi no ha requerido mantenimiento ni administración. El ticket anterior sugiere usar devpi, pero parece una solución muy complicada que requiere administración/supervisión/etc.

La solución pypi de GitLab parece estar a nivel de paquete individual (lo que significa que tendríamos que enumerar hasta más de 100 direcciones URL, una para cada paquete). Esto no parece práctico, pero tal vez no estoy entendiendo algo (también puedo ver el menú de registro del paquete en nuestro grupo, pero los documentos apuntan a los documentos "paquete-pypi").

¿No podemos ser la primera pequeña empresa que se ha enfrentado a este problema? ¿Existe una mejor manera que registrar versiones ficticias de todos nuestros paquetes en pypi.org (con version=0.0.1, por lo que se preferirá la versión s3pypi)?

over 4 years ago · Santiago Trujillo
4 Respostas
Responde à pergunta

0

Puede que no sea la solución para ti, pero te cuento lo que hacemos.

  1. Prefije los nombres de los paquetes y use espacios de nombres (por ejemplo, company.product.tool ).
  2. Cuando instalamos nuestros paquetes (incluidas sus dependencias internas), usamos un archivo requirements.txt que incluye nuestra URL de PyPI. Ejecutamos todo en contenedores e instalamos todas las dependencias públicas en ellos cuando construimos las imágenes.
over 4 years ago · Santiago Trujillo Relatório

0

Su empresa podría redirigir todas las solicitudes a pypi a un servicio que controle primero (quizás solo en los archivos de hosts de sus servidores de compilación)

Esto potencialmente le permitiría

  • preferir/anular paquetes arbitrarios con los locales
  • detectar tales casos
  • almacenar en caché paquetes ascendentes comunes/grandes localmente
  • rechazar versiones sospechosas/desconocidas/nombres de paquetes upstream
over 4 years ago · Santiago Trujillo Relatório

0

Usamos VCS para esto. Veo que lo ha descartado explícitamente, pero ¿ha considerado usar sucursales para marcar sus últimas compilaciones estables en VCS?

Si no está interesado en la última versión de master o la rama de desarrollo, pero está ejecutando prueba/control de calidad contra confirmaciones, entonces configuraría su suite de prueba/control de calidad para fusionarse en una rama llamada algo así como "estable" o "pypi -stable" y luego sus archivos de requisitos se ven así:

 pip install git+https://gitlab.com/yourorg/yourpackage.git@pypi-stable

La misma configuración funcionará para los bloques de requisitos setup.py (que permite dependencias internas encadenadas).

¿Me estoy perdiendo de algo?

over 4 years ago · Santiago Trujillo Relatório

0

Quizás podría obtener el comportamiento que está buscando de un requirements.txt y dos llamadas pip :

 cat requirements.txt | xargs -n 1 pip install -i <your-s3pipy> pip install -r requirements.txt

El primero intenta instalar lo que puede desde su repositorio local e ignora un paquete si falla. La segunda llamada intenta instalar todo lo que falló antes de pipy.

Esto funciona porque --upgrade-strategy only-if-needed es el valor predeterminado (a partir de pip 10.X, creo, no me cites al respecto). Si está utilizando un pip antiguo, es posible que deba especificarlo manualmente.


Una limitación de este enfoque es si espera/solicita un paquete local, pero no existe y existe un paquete con el mismo nombre en pipy. En este caso, obtendrá ese paquete en su lugar. No estoy seguro si eso es una preocupación.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda