2010-12-12 29 views
6

Estoy tratando de crear una secuencia de comandos python genérica para iniciar una aplicación de Python y me gustaría instalar cualquier módulo de python dependiente si faltan en el sistema de destino. ¿Cómo puedo ejecutar el equivalente del comando de línea de comando 'python setup.py install' desde dentro de Python? Siento que esto debería ser bastante fácil, pero no puedo resolverlo.¿Cómo ejecutar 'python setup.py install' desde dentro de Python?

+0

relacionadas: [? Llamada directamente distutils' o setuptools configuración() con nombre del comando/opciones, sin necesidad de analizar la línea de comandos] (http://stackoverflow.com/q/2850971/2127008) – Wrzlprmft

Respuesta

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

Cómo hacer eso si setup.py está en alguna otra ruta, por ejemplo en c: \ foo \ bar \ setup.py? – Aleksandar

5

Usted puede utilizar el módulo subprocess:

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

¿Cómo hacer eso si setup.py está en alguna otra ruta, por ejemplo en c: \ foo \ bar \ setup.py? – Aleksandar

+2

Pase en la ruta completa como segundo argumento. – sdolan

0

Sólo tiene que importar la misma.

import setup 
+6

Estaba pensando en esta línea. Una vez importado, ¿cómo puedo llamar 'instalar'? – jamesaharvey

2

Para aquellos, que utilizan setuptools puede utilizar setuptools.sandbox:

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

Esto funciona para mí (py2.7)
Tengo un módulo opcional con su setup.py en una subcarpeta del proyecto principal .

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

Gracias

Actualización:
Excavar un tiempo se pueden encontrar en 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. 

por lo que el código fuera embestido cambiado a

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

Camino tarde - pero si alguien se encuentra aquí como yo lo hice - esto funcionó para mí; (Python 3.4). Mi script estaba a un paquete de setup.py. Tenga en cuenta que debe tener chmod + x en setup.py, creo.

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