Ubicación personalizada para el archivo .pypirc

¿ setuptools permite que el archivo .pypirc se especifique en una ubicación personalizada en lugar de $HOME/.pypirc ? Estoy configurando un trabajo jenkins para publicar en un repository interno y quiero que el archivo .pypirc esté dentro del área de trabajo del trabajo.

Esto se puede hacer mediante la sobrecarga de las clases de comando predeterminadas utilizadas para la comunicación con el PyPI o su servidor de repository personalizado. Esto se puede hacer en su script setup.py . Deja que el código hable primero:

 # this is your project's setup.py script import os from distutils.command.register import register as register_orig from distutils.command.upload import upload as upload_orig from setuptools import setup class register(register_orig): def _get_rc_file(self): return os.path.join('.', '.pypirc') class upload(upload_orig): def _get_rc_file(self): return os.path.join('.', '.pypirc') setup( name='myproj', ... cmdclass={ 'register': register, 'upload': upload, } ) 

Ahora, si llamas por ejemplo

 $ python setup.py sdist register upload 

las credenciales del servidor se tomarán de .pypirc en el directorio del proyecto en lugar del predeterminado ~/.pypirc .

Básicamente, todo lo que necesita hacer es reemplazar los comandos de register y upload con sus propias implementaciones. Estas implementaciones redefinen el método _get_rc_file con su propia lógica. Después de eso, no olvide ajustar el argumento cmd_class en su función de setup para que se usen sus propias clases de comando en lugar de las estándar.

Por supuesto, ya que ambas clases redefinen el mismo método, usted podría pretender el código, por ejemplo, escribiendo una clase mixta y reutilizándola, etc. Además, si está cargando los documentos de sphinx a PyPI mediante el comando upload_docs , tiene que sobrecargarlo igual camino. De todos modos, debería obtener la idea básica de la sobrecarga de comandos del fragmento de código anterior.

Es posible que desee revisar la guita . Esta herramienta le permite especificar un archivo .pypirc personalizado a través de la opción --config-file

En la última versión de setuptools (versión 29.0.1), el archivo .pypirc se carga desde el directorio $HOME (o %USERPROFILE% en Windows).

Esto se hace en la clase setuptools.package_index.PyPIConfig . Ver el código fuente en GitHub:

 class PyPIConfig(configparser.RawConfigParser): def __init__(self): """ Load from ~/.pypirc """ defaults = dict.fromkeys(['username', 'password', 'repository'], '') configparser.RawConfigParser.__init__(self, defaults) rc = os.path.join(os.path.expanduser('~'), '.pypirc') if os.path.exists(rc): self.read(rc) 

Entonces, la única solución que veo es redefinir temporalmente la variable de entorno HOME antes de ejecutar el trabajo de Jenkins.