2010-12-12 40 views
6

Sto provando a creare uno script Python generico per l'avvio di un'applicazione python e vorrei installare qualsiasi modulo python dipendente se mancano dal sistema di destinazione. Come posso eseguire l'equivalente del comando da riga di comando "python setup.py install" da Python stesso? Credo che questo dovrebbe essere abbastanza facile, ma non riesco a capirlo.Come eseguire "python setup.py install" da Python?

+0

correlati: [? Direttamente chiamare distutils' o setuptools' setup() con il nome di comando/opzioni, senza l'analisi della riga di comando] (http://stackoverflow.com/q/2850971/2127008) – Wrzlprmft

risposta

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

Come per farlo se setup.py si trova su qualche altro percorso, per esempio in c: \ foo \ bar \ setup.py? – Aleksandar

5

È possibile utilizzare il modulo subprocess:

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

Come fare se setup.py si trova su un altro percorso, ad esempio in c: \ foo \ bar \ setup.py? – Aleksandar

+2

Passa nel percorso completo come secondo argomento. – sdolan

0

Basta importarlo.

import setup 
+6

Stavo pensando in questa direzione. Una volta importato, come posso chiamare "installa"? – jamesaharvey

2

Per coloro, che utilizzano setuptools è possibile utilizzare setuptools.sandbox:

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

Questo funziona per me (py2.7)
Ho un modulo opzionale con il suo setup.py in una sottocartella del progetto principale .

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

Grazie

Aggiornamento:
scavare un po ' si può trovare in 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. 

in modo che il codice di cui sopra shold essere cambiato in

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

In ritardo, ma se qualcuno si trova qui come ho fatto, questo ha funzionato per me; (Python 3.4). Il mio script era un pacchetto giù da setup.py. Nota, devi avere chmod + x su setup.py, credo.

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