2010-12-29 3 views
3

J'ai créé une installation de paquet python avec un fichier setup.py, et je veux copier un fichier de données dans le dossier (créé pour l'occasion) ~/.did. Le problème est que je dois appeler setup.py avec les droits sudo, comme il écrit dans/usr/local/... Donc quand mon fichier de données est copié dans ~/.did, seul l'utilisateur root a un accès en écriture au fichier .Comment chmod fichiers dans un python setup.py?

J'ai alors décidé d'ajouter un appel à os.chmod() après la fonction setup(), mais j'aimerais savoir si quelqu'un avait un moyen plus propre de le faire.

Voici mon fichier setup.py:

#!/usr/bin/env python 

from distutils.core import setup 
import os 

home=os.path.expanduser('~') 

setup(name='did', 
     version='1.0', 
     description='Daily Image Downloader', 
     author='Luc Mazon', 
     author_email='[email protected]', 
     url='', 
     license='GNU GPL v3', 
     scripts=['did'], 
     packages=['didlib'], 
     data_files=[ 
        ('/usr/share/man/man1', ['doc/did.1.gz']), 
        (home+'/.did', ['did.xml']) 
       ] 
    ) 

os.chmod(home+'/.did/did.xml', 0666) 

Comme did.xml est pas un fichier python, j'ai aussi créé un fichier MANIFEST.in avec la ligne suivante dans le:

include did.xml 

la structure globale de mon colis est la suivante:

did-1.0 
| didlib 
| | __init__.py 
| | variouspyfiles.py 
| doc 
| |-did.1.gz 
| MANIFEST.in 
| did.xml 
| did 
| setup.py 
+0

Ceci est une très mauvaise idée, car il ne sera disponible que pour un seul utilisateur. Les données à l'échelle du système doivent être placées sous '/ usr/share' ou similaire. –

+0

le fichier did.xml est complètement dépendant de l'utilisateur (en fait, c'est le fichier de configuration pour cet utilisateur spécifique), donc je pense que le placer dans ~/.did est assez bon – kluck

+4

Ensuite, votre programme devrait le créer lors de la première exécution. –

Répondre

4

Je pense qu'il serait préférable, et plus habituel, pas d'écrire dans le répertoire personnel du programme d'installation tous les fichiers de configuration. Qu'en est-il des autres utilisateurs? Il serait préférable que votre code vérifie, à l'initialisation, si ce fichier existe pour l'utilisateur qui l'exécute et n'en ajoute qu'un autre s'il ne l'est pas.

+0

Je devrais alors essayer d'installer le fichier "did.xml" par exemple dans "/ usr/share" pendant l'installation, puis pendant l'exécution du script copier ce fichier lors de l'initialisation (pour d'autres modifications personnalisées)? Quel endroit serait le meilleur pour installer le fichier alors? – kluck

+0

@kluck Cela dépend de la taille. Si elle est petite, vous pouvez essayer d'intégrer le modèle sous la forme d'une chaîne entre guillemets dans le code source. Ensuite, écrivez cette chaîne dans le nouveau fichier de configuration des utilisateurs. Il aura automatiquement les bonnes autorisations, aussi. – Keith

+0

Oui, le fichier a environ 40 lignes, je pourrais facilement le garder dans mon code. Merci beaucoup ! – kluck

0

pour moi, vous êtes à la recherche soit pour chown (propriétaire changeant) ou CHGR p (groupe changeant).

En outre, je ne vois pas pourquoi vous faites sudo, vous avez seulement besoin d'un accès correct à ces fichiers. Donc, il suffit d'ajouter chmod -R gou+rx setup_dir afin de pouvoir parcourir les installations.

+0

La raison pour laquelle je crée sudo est que le fichier setup.py exécute la commande suivante: "en créant /usr/local/lib/python2.6/dist-packages/didlib", et ne peut pas le faire sans un accès root. Je ne suis pas très bon avec chmod/chown/chgrp, mais si je continue à utiliser sudo (comme je ne vois pas d'autre moyen pour l'instant), je suppose que la commande "os.chown ('~/.did/did .xml ', os.geteuid()) "ne fonctionnerait pas car os.geteuid() devrait me donner l'identifiant root? Que dois-je taper alors? – kluck

+0

Je pense, je vais exécuter le script en utilisant l'utilisateur actuel, et appelez le sudo quand j'ai besoin. En faisant cela, je connais l'utilisateur actuel, et j'ai les bons droits. J'évite d'utiliser les droits sudo. – ykatchou

Questions connexes