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?
Répondre
import os
string = "python setup.py install"
os.system(string)
Comment faire cela si setup.py est sur un autre chemin, par exemple dans c: \ foo \ bar \ setup.py? – Aleksandar
Vous pouvez utiliser le module subprocess:
import subprocess
subprocess.call(['python', 'setup.py', 'install'])
Comment faire cela si setup.py est sur un autre chemin, par exemple dans c: \ foo \ bar \ setup.py? – Aleksandar
Passez le chemin complet comme deuxième argument. – sdolan
Juste importer.
import setup
Je pensais dans ce sens. Une fois importé, comment puis-je appeler 'installer'? – jamesaharvey
Lire ceci: http://docs.python.org/distutils/apiref.html#distutils.core.run_setup
Il est assez bien documenté.
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. –
@AdamRyczkowski, [DISTUTILS_DEBUG] (https://docs.python.org/2/distutils/setupscript.html) est votre ami – rstackhouse
Pour ceux qui utilisent setuptools vous pouvez utiliser setuptools.sandbox:
from setuptools import sandbox
sandbox.run_setup('setup.py', ['clean', 'bdist_wheel'])
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')
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")
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