【问题标题】:Using bjam's pythonpath feature使用 bjam 的 pythonpath 功能
【发布时间】: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


    【解决方案1】:

    我相信我可能已经找到了自己问题的答案。

    解决方案似乎是下面的project 规则,带有requirements 关键字,虽然我还不明白它为什么起作用,或者指定它的含义。

    这是我的 Jamfile:

    PROJECT_NAME = 示例;
    
    导入蟒蛇;
    
    # 在执行运行测试时设置 PYTHONPATH
    项目:要求..;
    
    蟒蛇扩展 $(PROJECT_NAME)_ext :
      $(PROJECT_NAME).cpp
      $(PROJECT_NAME)_ext.cpp
    :
    ;
    
    # 声明测试目标
    运行测试 $(PROJECT_NAME) : $(PROJECT_NAME)_ext test_$(PROJECT_NAME)_ext.py ;
    

    为了完整起见,我实际上是在一个目录中提取一个 Jamroot 文件,如下所示:

    导入蟒蛇; # 指定Boost项目的路径。如果你移动这个项目, # 调整此路径以引用 Boost 根目录。 使用项目提升 : 。/促进 ; # 设置所有项目都使用的项目范围的需求 # 全局 ID 为的项目中的 boost_python 库 # /升压/蟒蛇。 项目 : 要求 /boost/python//boost_python ; # 一个小“规则”(函数)来清理声明测试的语法 # 这些扩展模块。 规则运行测试(测试名称:来源+) { 进口检测; testing.make-test run-pyd : $(sources) : : $(test-name) ; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多