2010-05-02 7 views
1

Je configure un setup.py basé sur distutils pour un module python qui doit être installé sur un ensemble hétérogène de ressources. En raison de l'hétérogénéité, l'emplacement où le module est installé n'est pas le même sur chaque hôte, mais les disutils choisissent l'emplacement spécifique à l'hôte.configuration des permissions du module python (installation de python install)

Je trouve que le module est installé sans permissions o + rx en utilisant disutils (malgré le fait que umask est en avance sur setup.py). Une solution est de corriger manuellement ce problème, mais je voudrais un moyen automatisé qui fonctionne sur des cibles d'installation hétérogènes.

Par exemple, existe-t-il un moyen d'extraire l'emplacement de fin de l'installation depuis setup.py?

Toutes les autres suggestions?

Répondre

0

Je ne connais pas très bien les disutils, mais je devine que si vous creusez dessus jusqu'à ce que vous trouviez l'endroit où vos fichiers sont écrits, alors vous verrez la variable path sur cette ligne.

this page peut vous aider

0

os.path.dirname (__ FILE__) peut être ce que vous cherchez. __file__ dans un module renvoie le chemin depuis lequel le module a été chargé.

Si l'on suppose yourmodule est un dossier contenant Something.py, dans setup.py:

import os 
#setup(...) call here 
from yourmodule import Something 
print os.path.dirname(Something.__file__) 

La seule ride avec ce serait si la structure de votre fichier yourmodule a dans le même répertoire que setuputils. Dans ce cas, le chargeur python chargerait préférentiellement votre module. Quelque chose du répertoire courant.

Deux options peu hackish mais efficaces pour subvertir qui pourraient être soit

  1. Supprimez le répertoire en cours du chemin de python, le forçant à charger des fichiers qui existent actuellement dans le site-packages:

    import sys sys.path = sys.path [1:]

  2. renommer temporairement le dossier yourmodule juste avant l'instruction d'importation.

Avec l'option 1, l'ensemble est:

import os 
import sys 

#setup(...) call here 

#Remove first entry in sys.path which is current folder (probably impl dependent, but for practical purposes is consistent) 
sys.path = sys.path[1:] 
from yourmodule import Something 
print os.path.dirname(Something.__file__) 

Je viens de tester cela avec l'un de mes setup.py et il fonctionne très bien. Bonne chance!

0

Je trouve que le module est installé sans o + autorisations rx utilisant disutils

Je ne me souviens pas maintenant si des copies distutils les fichiers avec leurs droits est ou si elle seulement copie le contenu .

(en dépit de la configuration de umask avant la configuration en cours d'exécution.py)

Je ne sais pas comment umask et la copie de fichiers à partir de Python devraient interagir; umask s'applique-t-il aux appels système ou doit-il être explicitement pris en compte par le code Python?

Par exemple, est-il un moyen d'extraire l'emplacement de fin de l'installation à l'intérieur setup.py?

Il y en a un, un peu compliqué. Que feriez-vous avec cette information?