我有一个与 Boost.Python 一起使用的 Jamfile 来包装一些 C++ 类。我让 Jamfile 自动运行 python 脚本并将扩展加载为编译后步骤:
rule run-test ( test-name : sources + )
{
import testing ;
testing.make-test run-pyd : $(sources) : : $(test-name) ;
}
然后:
PROJECT_NAME = example ;
run-test $(PROJECT_NAME) : $(PROJECT_NAME)_ext test_$(PROJECT_NAME)_ext.py ;
这将构建 example_ext.so,然后运行 test_example_ext.py,它会执行一个简单的“import example_ext”,然后进行一些基本测试。
问题是我需要 test_example_ext.py 才能从其他包中导入一些 Python 模块,所以我需要设置 PYTHONPATH。从命令行来看,这不是问题,但即使导出,bjam 似乎也不会将其传递到其衍生的 Python 进程中。
在这种情况下,我正在寻找相当于:
$ export PYTHONPATH=..
即设置Python 搜索路径比我运行bjam 高一级。
我设法得到的最接近的是弄清楚这可以满足我的要求:
$ bjam pythonpath=..
这实际上有效。但我想在 Jamfile 中设置它,而不是依赖命令行。我读过 bjam 手册,上面说这是一个属性,我可以在<pythonpath>..
某个地方使用。但它没有说在哪里。
所以我的问题是我不知道如何在 Jamfile中指定这个属性。它去哪儿了?语法是什么?它是 user-config.jam 中“import python ;”或“using python ...”的一部分,还是 run-pyd 甚至 python-extension 规则的一部分?我已经随机尝试了所有这些,但没有理解或成功。
在boost_1_50_0/tools/build/v2/tools/python.jam
我发现:
# pythonpath 特性为 PYTHONPATH # 环境变量指定附加元素
,由 run-pyd 设置。例如,pythonpath 可用于
# 访问作为正在构建的产品的一部分但未
安装在开发系统的默认路径中的 Python 模块。
feature.feature pythonpath :: 免费的可选路径;
这似乎是在声明“pythonpath”属性(又名功能),但在什么上下文中?它可以在哪里以及如何使用?
这个页面演示了如何按照这些思路定义一个属性,而不是真正如何或在哪里使用它。