【发布时间】:2012-09-04 11:16:08
【问题描述】:
我有一个与 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,它会执行一个简单的“导入 example_ext”,然后进行一些基本测试。
问题是我需要 test_example_ext.py 才能从其他包中导入一些 Python 模块,所以我需要设置 PYTHONPATH。从命令行来看,这不是问题,但即使导出,bjam 似乎也不会将其传递到其衍生的 Python 进程。
在这种情况下,我正在寻找相当于:
$ export PYTHONPATH=..
即将 Python 搜索路径设置为比我运行 bjam 高一级。
我与get 最接近的方法是确定这是我想要的:
$ bjam pythonpath=..
这确实有效。但我想在 Jamfile 中设置它,而不是依赖命令行。我已经阅读了 bjam 手册,它说这是一个 property,我可以在某处使用<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: : free optional path ;
这似乎是在声明“pythonpath”属性(又名特性),但在什么上下文中?它可以在哪里以及如何使用?
this 页面演示了如何按照这些思路定义属性,但并未真正说明如何或在何处使用它。
【问题讨论】:
标签: python boost boost-python bjam