Sous Linux, j'ai mis mes configurations dans "~ / .pogramname". Où devrais-je le placer dans Windows? Quelle serait la manière recommandée d'ouvrir le système d'exploitation de fichier de configuration indépendant à Python? P>
merci! Nathan p>
5 Réponses :
Essayez: sur Linux, cela retournera: p> sous Windows Cela retournera: P> >>> import os
>>> os.path.join(os.path.expanduser('~'), '.programname')
'C:\\Documents and Settings\\user\\.programname'
"Ce qui est un peu laids [.]" Fonctionne bien, cependant.
Généralement, les fichiers de configuration et de données pour les programmes sous Windows vont dans le répertoire% Appdata% (ou sont censés), généralement dans un sous-répertoire avec le nom du programme. "% Appdata%", bien sûr, est juste une variable d'environnement qui correspond au dossier de données d'application de l'utilisateur actuel. Je ne sais pas si cela existe sur Linux (bien que je suppose que cela ne le suppose pas), afin de le faire à travers les plates-formes (Windows / Linux / MacOS) ...
import os if 'APPDATA' in os.environ.keys(): envar = 'APPDATA' else: envar = 'HOME' configpath = os.path.join(os.environ[envar], '.programname')
Sous Windows, vous le stockez dans La norme de répertoire de base XDG a été créée afin que la configuration puisse toutes être conservée au même endroit sans encombrer votre répertoire de maison avec des dotfiles. La plupart des nouvelles applications Linux le supportent. P> p> OS.Environ ['AppData'] code>. Sur Linux, cependant, il est maintenant recommandé de stocker des fichiers de configuration dans os.environ ['xdg_config_home'] code>, qui par défaut à ~ / .config code>. Ainsi, par exemple, bâtir sur l'exemple de JAB:
Ceci est une réponse vraiment multiplate-forme!
Quelques améliorations sur La bonne réponse du leadStorm :
Code peut être plus simple en utilisant en outre, si vous êtes prêt à utiliser les bibliothèques externes, os.environ.get () code> et court-circuit ou code>: p> xdg code> package peut rendre les choses encore plus faciles sur Linux et Mac: P> if 'APPDATA' in os.environ:
configpath = os.path.join(os.environ['APPDATA'], "programname")
os.makedirs(configpath, exist_ok=True)
else:
configpath = xdg.save_config_path("programname")
Le OS.Makedirs (configPath, exige_ok = true) code> fonctionne simplement sous PY3. py2: sinon os.path.exists (configpath): OS.Makedirs (configpath) code>
@greeeeeeen: Pour Py2, je recommanderais un ESSAYER / SAUF CODE> Block autour de Os.Makedirs CODE> Pour éviter une condition de course, dans True Pythonic EAFP esprit
Je pense que ce n'est pas un cas EAFP ... Si vous parlez de pythonie, je pense que la construction si la construction est "explicite est meilleure que le guide implicite".
@greeeeeeen: Test si Dir existe et alors i> Création est Motif lbyl et peut conduire à conditions de course si le répertoire est créé après la si code> et avant OS.Makedirs () code>. Très improbable, mais c'est une bonne pratique pour éviter les modèles racés chaque fois que nous le pouvons. Et, dans ce cas, EAFP est également plus rapide . Quant à la "explicitation", IMHO essayant directement de créer et de gérer toutes les erreurs est encore plus explicite.
Bon point. Il serait donc préférable d'adapter la mise en œuvre de l'OS.Makedir de Python 3 dans ce cas. Là, ils utilisent un try-sauf sauf que vous avez suggéré. Github.com/python/cpython/blob/...
Mon approche lors de l'utilisation de la bibliothèque Pathlib de Python:
config = environ.get('APPDATA') or environ.get('XDG_CONFIG_HOME')
config = Path(config) if config else Path.home() / ".config"