2017-06-03 1 views
0

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à?

Répondre

0

Pourquoi pas vous? setup.py est également un script python, peut-être que vous pouvez ajouter manuellement vos fichiers de configuration pour éviter de les ajouter dans les métadonnées? Comme le code suivant:

from setuptools import setup 
from shutil import copyfile 
import os 
... 
setup(
... 
# no data_files option 
... 
) 
if not os.path.exists(configuration_file): 
    copyfile(configuration, configuration_file) 
+0

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. –

+0

@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

+0

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". –