setuptools
permet-il de spécifier le fichier .pypirc
dans un emplacement personnalisé plutôt que $HOME/.pypirc
? Je suis en train de configurer un travail jenkins pour publication dans un référentiel interne et je souhaite que le fichier .pypirc
se trouve dans l'espace de travail du travail.
Cela est possible en surchargeant les classes de commandes par défaut utilisées pour la communication avec PyPI ou votre serveur de référentiel personnalisé. Cela peut être fait dans votre script setup.py
. Laissez le code parler en premier:
# 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,
}
)
Maintenant, si vous appelez par exemple.
$ python setup.py sdist register upload
les informations d'identification du serveur seront extraites de .pypirc
dans le répertoire du projet au lieu de celui par défaut ~/.pypirc
.
En gros, tout ce que vous avez à faire est de remplacer les commandes register
et upload
par vos propres implémentations. Ces implémentations redéfinissent la méthode _get_rc_file
avec votre propre logique. Après cela, n'oubliez pas de régler l'argument cmd_class
dans votre fonction setup
afin que vos propres classes de commandes soient utilisées à la place des classes standard.
Bien sûr, à mesure que les deux classes redéfinissent la même méthode, vous pouvez prettifier le code, par exemple. écrire une classe mixin et la réutiliser, etc. etc. De plus, si vous téléchargez les documents sphinx sur PyPI via la commande upload_docs
, vous devez les surcharger de la même manière. Quoi qu'il en soit, vous devriez vous faire une idée de base de la surcharge de commande à partir de l'extrait de code ci-dessus.
Vous voudrez peut-être consulter twine . Cet outil vous permet de spécifier un fichier .pypirc
personnalisé via l'option --config-file
.
Dans la dernière version de setuptools
(version 29.0.1), le fichier .pypirc
est chargé à partir du répertoire $HOME
(ou %USERPROFILE%
sous Windows).
Ceci est fait dans la classe setuptools.package_index.PyPIConfig
. Voir le code source sur 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)
La seule solution que je vois est donc de redéfinir temporairement la variable d'environnement HOME
avant d'exécuter le travail Jenkins.