【发布时间】:2018-08-03 22:15:00
【问题描述】:
我的任务是为基于 c++ 的项目构建 python 绑定(使用 swig)。该项目使用 cmake 构建和 ctest 进行测试,并且应该将绑定的构建和测试集成到其中。
我已经让构建工作并且测试在手动运行时工作,但我必须设置几个环境变量才能让它们工作,而我在为自动化过程设置这些变量时遇到了麻烦。
我需要设置 LD_LIBRARY_PATH 和 PYTHONPATH。 PYTHONPATH 我可以通过在测试脚本中操作 sys.path 来解决问题,但使用 LD_LIBRARY_PATH 就更难了。到目前为止,我已将以下内容添加到测试目录中的 CMakelists.txt 中:
#Python wrapper testing
find_package(PythonInterp 3.5 REQUIRED)
if (NOT PYTHONINTERP_FOUND)
message(STATUS "Python interpreter NOT found")
else(NOT PYTHONINTERP_FOUND)
message(STATUS "Python interpreter found")
ADD_TEST(NAME testPyMyproj
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_scripts/test_pyMyproj.py
)
set_property(TEST testPyMyproj PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib/)
endif (NOT PYTHONINTERP_FOUND)
我得到的错误是
ImportError: libMyproj.so: cannot open shared object file: No such file or directory
我的绑定链接到哪个库,位于${CMAKE_BINARY_DIR}/lib/ 指定的目录中。
我认为这意味着$LD_LIBRARY_PATH 设置不正确,但我不知道我做错了什么。
有没有办法在测试中检查变量的状态是什么?谁能发现我做错了什么?
【问题讨论】:
-
谢谢。因为我怀疑变量是空的。
-
好吧,它并没有解决我做错的主要问题。
-
我不知道你想做什么。
I need to set LD_LIBRARY_PATH and PYTHONPATH. PYTHONPATH I can get around that by...你不能只设置环境变量吗? -
我可以手动设置它们,然后它就可以工作了,但这需要在 docker 容器中自动运行。我正在尝试以不依赖于系统预先存在的状态的方式设置它们。
-
为什么不使用
os.environ["LD_LIBRARY_PATH"] = "foo"?