J'essaie de trouver un moyen sympa d'expédier les fichiers de configuration par défaut avec mon projet python setuptools.Setuptools: comment distribuer des fichiers de configuration sans effacer ceux déjà existants?
Pour l'instant, je le fais comme ceci:
from setuptools import setup
setup(
...
data_files = [('/usr/local/etc', ['files/myproject.conf', ...])]
...
)
Le problème est que les fichiers de configuration sont effacés si je désinstaller mon paquet. Habituellement, lors de la désinstallation d'un paquet sur Linux ou FreeBSD, les fichiers de configuration ne sont pas supprimés. Je pense que c'est bien, car parfois vous voulez juste désinstaller un paquet pour réinstaller une autre version, ou l'installer avec d'autres options etc ... Vous ne vous attendez pas à ce que vos fichiers de configuration soient supprimés.
Comment atteindre la même chose avec setuptools? Comment installer les fichiers de configuration seulement s'ils n'existent pas déjà?
Je ne sais pas exactement comment le processus de désinstallation décide quels fichiers doivent être effacés. Est-ce que la commande 'pip uninstall' utilise simplement le même script setup.py que la commande' pip install'? Si oui, je suppose que votre solution devrait fonctionner. –
@JohnSmithOptional Tout d'abord, 'pip uninstall' fonctionne sans le fichier' setup.py'. Deuxièmement, je pense avoir mal compris votre question. Maintenant, je pense que vous pourriez ajouter votre fichier de configuration par le code python brut au lieu d'utiliser l'option 'data_files'. Donc, il ne sera pas ajouté dans les métadonnées des paquets. Et vous pouvez avoir l'accès complet pour contrôler vos fichiers de configuration. Je vais éditer ma réponse. – Sraw
Ce code s'exécute lorsque je crée le paquet en utilisant la commande 'python setup.py sdist --formats = gztar'. Cela s'exécute sur mon ordinateur portable où je suis un utilisateur simple et il essaie de créer un fichier /usr/local/etc/myproject.conf sur mon ordinateur portable, (qui, comme vous le savez, n'est pas ce que je suis en train de faire) . Cela empêche également la création de l'archive, car le script échoue avec un "PermissionError: [Errno 13] Permission denied". –