2010-12-12 25 views
6

Tôi đang cố gắng tạo một tập lệnh python chung để khởi động ứng dụng python và tôi muốn cài đặt bất kỳ mô-đun python phụ thuộc nào nếu chúng bị thiếu từ hệ thống đích. Làm thế nào tôi có thể chạy tương đương với lệnh dòng lệnh 'python setup.py install' từ bên trong Python? Tôi cảm thấy như thế này khá dễ, nhưng tôi không thể hiểu được.Làm thế nào để chạy 'python setup.py install' từ bên trong Python?

+0

liên quan: [? Gọi trực tiếp đến distutils' hoặc setuptools' setup() chức năng với tên lệnh/tùy chọn, mà không phân tích cú pháp dòng lệnh] (http://stackoverflow.com/q/2850971/2127008) – Wrzlprmft

Trả lời

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

thế nào để làm điều đó nếu setup.py nằm trên một số đường dẫn khác, ví dụ trong c: \ foo \ bar \ setup.py? – Aleksandar

5

Bạn có thể sử dụng các mô-đun subprocess:

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

Cách thực hiện điều đó nếu setup.py nằm trên một số đường dẫn khác, ví dụ: trong c: \ foo \ bar \ setup.py? – Aleksandar

+2

Vượt qua đường dẫn đầy đủ làm đối số thứ hai. – sdolan

0

Chỉ cần nhập nó.

import setup 
+6

Tôi đã suy nghĩ theo những dòng này. Sau khi được nhập, làm cách nào để gọi 'cài đặt'? – jamesaharvey

8
+1

Tôi đã đọc tài liệu. Bạn có thể cho tôi một ví dụ không? 'run_setup ('/ home/ubuntu/python-augeas/setup.py', ['install'])' không hoạt động. –

+0

@AdamRyczkowski, [DISTUTILS_DEBUG] (https://docs.python.org/2/distutils/setupscript.html) là bạn của bạn – rstackhouse

2

Đối với những người sử dụng setuptools bạn có thể sử dụng setuptools.sandbox:

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

này làm việc cho tôi (py2.7)
Tôi có một mô-đun tùy chọn với setup.py của nó trong một thư mục con của dự án chính .

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

Cảm ơn

Cập nhật:
Đào một thời gian bạn có thể tìm thấy trong 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. 

nên mã trên shold được đổi thành

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

Cách trễ - nhưng nếu ai đó tìm thấy anh ấy/cô ấy ở đây như tôi đã làm - điều này hiệu quả với tôi; (trăn 3.4). Tập lệnh của tôi là một gói xuống từ setup.py. Lưu ý, bạn phải có chmod + x trên setup.py, tôi tin.

cwd = os.getcwd() 
parent = os.path.dirname(cwd) 
os.chdir(parent) 
os.system("python setup.py sdist") 
Các vấn đề liên quan