2012-03-23 305 views
3

我構建的結構類似:SCons:如何在已用VariantDir調用的SConscript中導入Python模塊?

SConstruct 
subdir/SConscript 
subdir/module/__init__.py 

SConstruct調用subdir/SConscript作爲子公司:

# SConstruct 
SConscript('subdir/SConscript') 

subdir/SConscript進口module

# subdir/SConscript 
from module import foo 
do SConsy stuff with foo()... 

,直到我用variant_dirsubdir/SConscript這工作正常:

# SConstruct 
SConscript('subdir/SConscript', variant_dir='subdir/build', duplicate=0) 

的問題是,import失敗,因爲module是道路,這已被variant_dir改變不再。

是否有標準的方法來解決SCons或Python中的這個問題?我知道site_scons這個特殊的目錄,但是看起來這個目錄必須以SConstruct的最高級別存在,我想保留subdir特定的文件在subdir之下。

回答

3

在項目根目錄中爲你使用site_scons dir模塊。例如,我已經模塊xxx,他被放置在:root/site_scons/xxx/__init__.py。現在,我可以在我所有的SConscript文件中導入xxx。

+1

您也可以通過-I或--include-dir選項指定scons的路徑,這樣可以指定python模塊的路徑,但這可能會更困難(每次執行scons時都會輸入更多內容),除非您將呼叫打包到另一個腳本的scons腳本中。 – Brady 2012-03-23 08:11:57

+0

感謝您的回答。其實我試圖避免使用'site_scons'目錄,並最終使用下面的解決方案,但我會接受這個。 – 2012-03-25 01:23:13

1

SConscript,在import之前,改變Python的路徑:

# subdir/SConscript 
module_path = Dir('.').srcnode().abspath # get the path to subdir 
import sys 
sys.path.append(module_path) 
from module import foo 
0

出口PYTHONPATH = /路徑/要/ dir_of_modules

這爲我工作