2010-12-12 11 views
6

Próbuję utworzyć ogólny skrypt python do uruchamiania aplikacji Pythona i chciałbym zainstalować wszelkie zależne moduły python, jeśli brakuje ich w systemie docelowym. Jak uruchomić ekwiwalent polecenia wiersza poleceń "python setup.py install" z poziomu samego Pythona? Czuję, że to powinno być całkiem łatwe, ale nie mogę tego rozgryźć.Jak uruchomić "Instalację python setup.py" z poziomu Pythona?

+0

pokrewne: [? Wywołać bezpośrednio distutils' lub setuptools' setup() funkcji z nazwy poleceń/opcji, bez analizowania wiersza polecenia] (http://stackoverflow.com/q/2850971/2127008) – Wrzlprmft

Odpowiedz

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

Jak to zrobić, jeśli plik setup.py znajduje się w innej ścieżce, na przykład w c: \ foo \ bar \ setup.py? – Aleksandar

5

można użyć modułu subprocess:

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

Jak to zrobić, jeśli plik setup.py znajduje się w innej ścieżce, na przykład w c: \ foo \ bar \ setup.py? – Aleksandar

+2

Przekaż pełną ścieżkę jako drugi argument. – sdolan

0

Wystarczy zaimportować go.

import setup 
+6

Myślałem o tym. Po zaimportowaniu w jaki sposób mogę zadzwonić do "instalacji"? – jamesaharvey

2

Dla tych, którzy korzystają z setuptools można użyć setuptools.sandbox:

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

Działa to dla mnie (py2.7)
Mam opcjonalny moduł z jego setup.py w podkatalogu głównego projektu .

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

Dzięki

Aktualizacja:
kopanie chwilę można znaleźć w 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. 

więc powyższy kod shold być zmieniono na

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

Droga do późna - ale jeśli ktoś znajdzie się tutaj tak jak ja - to zadziałało dla mnie; (python 3.4). Mój skrypt był o jeden pakiet niższy od setup.py. Zauważ, że musisz mieć chmod + x na setup.py, jak sądzę.

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