【问题标题】:When running python script from CMake installed python modules can't be found从 CMake 运行 python 脚本时,找不到安装的 python 模块
【发布时间】:2021-11-04 13:41:37
【问题描述】:

本地环境

$ uname -a
Darwin Mac-mini.local 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021; root:xnu-7195.141.2~5/RELEASE_X86_64 x86_64
$ python3 --version
Python 3.9.7
$ cmake --version
cmake version 3.21.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
$ xcode-select --version
xcode-select version 2384.

Xcode:版本 12.5.1 (12E507)

问题

我有一些大型的构建由cmake 管理。

现在一些依赖是通过 python 脚本下载的。需要paramiko 库,因为其中一些依赖项是使用 ssh/sftp 连接搜索和下载的。这些细节并不重要。

现在,当我从命令行运行此脚本时,它可以完美运行。它会找到所有 python 模块,并且能够下载所有依赖项。
CMakeLists.txt 中的cmake 命令调用相同的脚本时会出现问题。脚本失败,因为它无法加载 paramiko 库,这很奇怪,因为如果直接从与 cmake .. -G Xcode 相同的命令行运行脚本可以工作。

基本上是这样的:

add_custom_target(DependenciesDownload ALL ./download.py <some arguments>
    BYPRODUCTS
        "${CMAKE_CURRENT_BINARY_DIR}/poroduct/libproduct.${PRODUCT_EXTENSION}"
    WORKING_DIRECTORY "${PROJECT_SRC_ROOT}/scriptPath"
    COMMENT "Unzips dependency from SMB network drive or sftp address"
)

我还尝试了显式调用 python 的版本:python3 ./download.py &lt;some arguments&gt;env python3 ./download.py &lt;some arguments&gt;,结果完全相同。

注意

我在其他 MacOS 机器上遇到了同样的问题,它开始正常工作我不知道我做了什么让它工作,我现在无法复制。

【问题讨论】:

    标签: python c++ cmake


    【解决方案1】:

    我在 Linux 上遇到了类似的问题。 当从 CMake 调用 Python 脚本时,它找不到任何包。

    问题是 PATH 环境变量不相同。从 CMake 调用脚本时,安装 Python 包的目录丢失。

    我不使用 Mac 并且不确定这是否以相同的方式工作。 不过你可以试试:

    • 在 python 脚本中打印出 PATH 变量。并检查是否有差异。
    import os 
    print(os.environ) # printing environment variables
    
    • 在脚本中设置包的绝对路径。 (用于故障排除)

    【讨论】:

    • 是的,我已经发现了这个问题。原来 Xcode 命令行工具安装了自己的 python3 版本:|并且出于某种原因cmake 选择了 Xcode 版本的 python。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多