2009-07-22 28 views
4

我有一個Python模塊的SConstruct文件的工作,我的建築:安裝使用SCons()只與--install的沙箱

import distutils.sysconfig 

env = Environment(CPPPATH=['include', distutils.sysconfig.get_python_inc()], 
        CPPFLAGS='-ggdb', SWIGFLAGS=['-python'], 
        SWIGPATH=['include']) 

env.ParseConfig('net-snmp-config --libs --cflags') 
env.Append(LIBS = 'pthread') 

backend_interface = 'src/backend_interface.c' 
backend_thread = 'src/backend_thread.c' 
python_wrapper = 'src/backend_thread.i' 


lib = env.SharedLibrary(target = "_rpdu_backend", 
         source = [ backend_interface, 
         backend_thread, python_wrapper ], 
         SHLIBPREFIX='') 

env.Install(distutils.sysconfig.get_python_lib(), 
      [ lib, 'src/rpdu_backend.py']) 

運行:

$ scons --install-sandbox=./sandbox

導致圖書館關聯的.py模塊安裝在./sandbox/usr/local/lib/python2.6/site-packages中。如果我只需運行:

# scons

爲根,沒有安裝到/usr/local/lib/python2.6/site-packages。

爲什麼scons建立安裝目標沒有沙箱選項?

回答

4

所以周圍有很多挖後,事實證明,要做到這一點的最好辦法是:

import distutils.sysconfig 

env = Environment(CPPPATH=['include', distutils.sysconfig.get_python_inc()], 
        CPPFLAGS='-ggdb', SWIGFLAGS=['-python'], 
        SWIGPATH=['include']) 

env.ParseConfig('net-snmp-config --libs --cflags') 
env.Append(LIBS = 'pthread') 

backend_interface = 'src/backend_interface.c' 
backend_thread = 'src/backend_thread.c' 
python_wrapper = 'src/backend_thread.i' 


lib = env.SharedLibrary(target = "_rpdu_backend", 
         source = [ backend_interface, 
         backend_thread, python_wrapper ], 
         SHLIBPREFIX='') 
inst = env.Install(distutils.sysconfig.get_python_lib(), 
        [ lib, 'src/rpdu_backend.py']) 

env.Alias("install", inst) 
env.Depends(inst, lib) 
Ignore('.', inst) 

這就建立了一個假目標,其中,調用時,迫使外其一貫的「使用SCons只在當前目錄下建立「的方法。它還確保在安裝之前完成構建,並提供便捷的卸載使用:

# scons install --clean