Meson安装的Python包无法被Pip识别,Pip直接安装编译失败求助
在MSYS2 UCRT64环境中通过pip install .编译contourpy的解决方案
问题分析
- 手动用meson编译后
pip list看不到包:因为meson install --destdir仅复制文件到virtualenv目录,但未生成pip识别所需的元数据(.dist-info目录)。 - 直接
pip install .报错:pip默认创建的隔离构建环境可能调用Windows版本的工具链,导致meson错误要求VS环境。
解决方案
1. 确保MSYS2 UCRT64环境依赖完整
先在UCRT64终端安装必要工具:
pacman -S mingw-w64-ucrt-x86_64-python mingw-w64-ucrt-x86_64-pip \ mingw-w64-ucrt-x86_64-meson mingw-w64-ucrt-x86_64-ninja \ mingw-w64-ucrt-x86_64-gcc
2. 配置环境变量强制使用MSYS2工具链
激活virtualenv后,设置环境变量确保pip优先使用MSYS2的编译工具:
source ~/envs/contourpy/bin/activate export PATH="/ucrt64/bin:$PATH" # 让MSYS2工具在Windows工具前被找到 export CC=gcc # 指定MSYS2的GCC作为编译器
3. 用pip安装时禁用隔离构建环境
直接运行以下命令,避免pip创建隔离环境导致工具链冲突:
pip install . --no-build-isolation
备选方案:指定构建工具路径(如果需要隔离环境)
如果必须使用pip的隔离构建环境,可直接指定meson和ninja的MSYS2路径:
pip install . --config-settings meson=/ucrt64/bin/meson --config-settings ninja=/ucrt64/bin/ninja
补充:修复手动编译后pip识别问题
如果想保留手动编译方式并让pip识别,可修改meson的prefix参数,直接安装到virtualenv的site-packages:
meson setup builddir --prefix=$(python -c "import sys; print(sys.prefix)") ninja -C builddir ninja install -C builddir
这样编译后pip list就能看到contourpy了。
内容的提问来源于stack exchange,提问作者TheEponymousProgrammer
相关产品推荐
相关产品推荐

