2010-12-12 7 views
6

J'essaie de créer un script python générique pour démarrer une application python et je voudrais installer tous les modules python dépendants s'ils sont manquants sur le système cible. Comment puis-je exécuter l'équivalent de la commande de ligne de commande 'python setup.py install' depuis Python même? Je pense que cela devrait être assez facile, mais je ne peux pas le comprendre.Comment lancer 'python setup.py install' depuis Python?

+0

connexes: [? Appeler directement distutils' ou setuptools fonction de la configuration() avec le nom de commande/options, sans analyse de la ligne de commande] (http://stackoverflow.com/q/2850971/2127008) – Wrzlprmft

Répondre

3
import os 
string = "python setup.py install" 
os.system(string) 
+0

Comment faire cela si setup.py est sur un autre chemin, par exemple dans c: \ foo \ bar \ setup.py? – Aleksandar

5

Vous pouvez utiliser le module subprocess:

import subprocess 
subprocess.call(['python', 'setup.py', 'install']) 
+0

Comment faire cela si setup.py est sur un autre chemin, par exemple dans c: \ foo \ bar \ setup.py? – Aleksandar

+2

Passez le chemin complet comme deuxième argument. – sdolan

0

Juste importer.

import setup 
+6

Je pensais dans ce sens. Une fois importé, comment puis-je appeler 'installer'? – jamesaharvey

8
+1

J'ai lu les documents. Pouvez-vous s'il vous plaît me donner un exemple? 'run_setup ('/ home/ubuntu/python-augeas/setup.py', ['installer'])' ne fonctionne pas. –

+0

@AdamRyczkowski, [DISTUTILS_DEBUG] (https://docs.python.org/2/distutils/setupscript.html) est votre ami – rstackhouse

2

Pour ceux qui utilisent setuptools vous pouvez utiliser setuptools.sandbox:

from setuptools import sandbox 
sandbox.run_setup('setup.py', ['clean', 'bdist_wheel']) 
0

Cela fonctionne pour moi (py2.7)
J'ai un module optionnel avec son setup.py dans un sous-dossier du projet principal .

from distutils.core import run_setup [..setup(..) config of the main project..] run_setup('subfolder/setup.py', script_args=['develop',],stop_after='run')

Merci

Mise à jour:
Creuser un certain temps vous pouvez trouver dans distutils.core.run_setup

'script_name' is a file that will be run with 'execfile()'; 
'sys.argv[0]' will be replaced with 'script' for the duration of the 
call. 'script_args' is a list of strings; if supplied, 
'sys.argv[1:]' will be replaced by 'script_args' for the duration of 
the call. 

de sorte que le code ci-dessus shold être changé en

import sys 
from distutils.core import run_setup 
run_setup('subfolder/setup.py', script_args=sys.argv[1:],stop_after='run') 
0

Très en retard - mais si quelqu'un se trouve ici comme moi - cela a fonctionné pour moi; (python 3.4). Mon script était un paquet de setup.py. Notez, vous devez avoir chmod + x sur setup.py, je crois.

cwd = os.getcwd() 
parent = os.path.dirname(cwd) 
os.chdir(parent) 
os.system("python setup.py sdist")