GitHub Actions中CMake无法识别Python虚拟环境的问题求助
GitHub Actions中CMake无法识别虚拟环境的解决方案
问题本质
激活虚拟环境后,当前Shell的PATH已包含虚拟环境的Python路径,直接执行Python脚本能正常调用虚拟环境中的解释器与依赖。但CMake默认的Python查找逻辑会优先扫描系统路径,而非继承当前Shell的环境变量,导致调用Python脚本时找不到虚拟环境内安装的jinja2等依赖。
解决方法
1. 显式指定CMake使用的Python解释器路径
在运行CMake时,通过-DPython_EXECUTABLE参数直接指向虚拟环境中的Python可执行文件,强制CMake使用虚拟环境:
cmake .. -DPython_EXECUTABLE="./venv/bin/python"
Windows环境下路径为./venv/Scripts/python.exe,需根据Runner系统调整。
2. 确保虚拟环境变量与CMake在同一Shell进程中
GitHub Actions中,若将虚拟环境激活与CMake执行拆分到不同Step,环境变量不会被继承。需将两个操作放在同一个run块内,保证共享Shell环境:
- name: Build with CMake run: | source venv/bin/activate mkdir -p build && cd build cmake .. -DPython_EXECUTABLE="../venv/bin/python" make
3. 缓存虚拟环境时固定路径
缓存虚拟环境时,需保证每次创建的虚拟环境路径完全一致,避免缓存恢复后Python路径变更:
- name: Cache virtual environment uses: actions/cache@v3 id: cache-venv with: path: ./venv key: ${{ runner.os }}-venv-${{ hashFiles('requirements.txt') }}
修正后的配置示例
Workflow片段
- name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.10' - name: Cache virtual environment uses: actions/cache@v3 id: cache-venv with: path: ./venv key: ${{ runner.os }}-venv-${{ hashFiles('requirements.txt') }} - name: Create virtual environment if: steps.cache-venv.outputs.cache-hit != 'true' run: | python -m venv venv source venv/bin/activate pip install -r requirements.txt - name: Build with CMake run: | source venv/bin/activate mkdir -p build && cd build cmake .. -DPython_EXECUTABLE="../venv/bin/python" make
CMakeLists.txt片段
find_package(Python REQUIRED) execute_process( COMMAND ${Python_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/generate_code.py RESULT_VARIABLE PY_SCRIPT_RESULT ) if(NOT PY_SCRIPT_RESULT EQUAL 0) message(FATAL_ERROR "Python script execution failed") endif()
内容的提问来源于stack exchange,提问作者Hymir
相关产品推荐
相关产品推荐

