SCons: Как импортировать модуль Python в SConscript, который был вызван с помощью VariantDir? - PullRequest
4 голосов
/ 23 марта 2012

Моя сборка имеет вид:

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.

Существует ли стандартный способ решения этой проблемы в SCons или Python? Я знаю о специальном каталоге site_scons, но, похоже, этот каталог должен существовать на верхнем уровне с корнем SConstruct, и я хотел бы сохранить subdir -специфичные файлы в subdir.

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Используйте каталог site_scons в корневом каталоге проекта для вашего модуля. Например, у меня есть модуль ххх, и он размещен: root/site_scons/xxx/__init__.py. Теперь я могу импортировать ххх во все мои файлы SConscript.

1 голос
/ 23 марта 2012

В 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 голосов
/ 07 сентября 2017

экспорт PYTHONPATH = / путь / к / dir_of_modules

Это сработало для меня

...