SCons:如何在使用VariantDir调用的SConscript中导入Python模块?

时间:2012-03-23 00:03:39

标签: scons python-import

我的构建结构如下:

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_dir subdir/SConscript使用# SConstruct SConscript('subdir/SConscript', variant_dir='subdir/build', duplicate=0) 之前,此工作正常。

import

问题是module失败,因为variant_dir已不在路径中,而site_scons已改变了路径。

有没有一种标准的方法可以在SCons或Python中解决这个问题?我知道特殊的SConstruct目录,但看起来这个目录必须存在于顶级的subdir根目录,并且我想保留subdir - {下的特定文件{1}}。

3 个答案:

答案 0 :(得分:3)

在项目根目录中使用site_scons目录为您的模块。例如,我是模块xxx,他被放置:root/site_scons/xxx/__init__.py。现在,我可以在所有SConscript文件中导入xxx。

答案 1 :(得分: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

答案 2 :(得分:0)

导出PYTHONPATH = / path / to / dir_of_modules

这对我有用