En el trabajo utilizamos un servidor privado pypi. Este servidor pypi se especifica como un enlace de dependencia:
...
from setuptools import setup
config = ConfigParser.ConfigParser()
rc = os.path.join(os.path.expanduser('~'), '.pypirc')
config.read(rc)
dependency_links = [
'https://{}:{}@<private_url>'.format(
config.get('dc', 'username'), config.get('dc', 'password'))]
setup(
dependency_links=dependency_links,
...)
Esto funciona bien en la mayoría de nuestros casos. Sin embargo, hace algún tiempo tuvimos que instalar paquetes en un servidor cliente. Para esto tuvimos que copiar un documento válido .pypirc
antes de poder instalar cualquier paquete.
Además, el código anterior se siente como un truco sucio.
¿Cuál es la forma correcta de especificar enlaces de dependencia seguros sin credenciales de codificación?
Respuestas:
Esto parece un truco razonable y no sucio en absoluto.
El trabajo se está haciendo y se está haciendo bien, la única forma de hacerlo mejor es documentarlo y probarlo en múltiples configuraciones diferentes o con múltiples servidores pypi y abordar los problemas que surjan de eso.
fuente
Una posibilidad sería establecer variables de entorno . Esto podría hacerse con herramientas de implementación como Ansible . Almacenando tus secretos con Stack Overflow's Blackbox o Ansible's Vault
Alternativamente: la contenedorización ayudaría, ya que todo lo necesario para ejecutar el software está integrado.
fuente
Tenga mucho cuidado al usar esta solución. Como se indica en la documentación :
Es decir, sus credenciales se distribuirán en el
.egg
. Al rootear elsetuptools
código fuente, descubrí que internamente parece estar usando eleasy_install
comando para instalar dependencias. Por lo tanto, agregar lo siguiente a sussetup.cfg
causas hace que recoja un repositorio privado:Esto todavía tiene el inconveniente de que sus credenciales se imprimen en el terminal cuando lo está instalando, pero al menos no terminan en su distribución. Tenga en cuenta que esta solución reemplaza su URL de índice, por lo que su repositorio privado también debe reflejar el público. No vi soporte para agregar URL de índice de ninguna manera obvia.
fuente