在Cygwin虚拟环境(venv)中安装NumPy时出现编译错误:sys/select.h文件缺失的问题求助
我现在在Windows 10的Cygwin环境里运行Python 3.9,这个Python是Cygwin自带的版本。我在新建的虚拟环境(venv)里尝试执行pip install numpy,结果它找不到兼容的wheel包,只能开始编译NumPy源码。但编译到几个.c文件的时候失败了,原因是找不到sys/select.h文件。顺便提一句,ChatGPT觉得这可能是因为构建系统(比如Ninja?)误以为还是要针对Cygwin构建,而不是原生构建(尽管我用的是ming32-gcc)。下面是其中一个错误的示例:
[194/535] Generating numpy/_core/_multiarray_tests.cpython-39-x86_64-cygwin.dll.p/_multiarray_tests.c [195/535] Compiling C object numpy/_core/libnpymath.a.p/meson-generated_ieee754.c.o FAILED: numpy/_core/libnpymath.a.p/meson-generated_ieee754.c.o /usr/bin/x86_64-w64-mingw32-gcc -Inumpy/_core/libnpymath.a.p -Inumpy/_core -I../numpy/_core -Inumpy/_core/include -I../numpy/_core/include -I../numpy/_core/src/npymath -I../numpy/_core/src/common -I/usr/include/python3.9 -I/tmp/pip-install-2nk4smdu/numpy_d0c3008da8224ebc9f1bede0e4cba273/.mesonpy-y0j8jkqq/meson_cpu -fdiagnostics-color=always -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -std=c11 -O3 -fno-strict-aliasing -msse -msse2 -msse3 -DNPY_HAVE_SSE2 -DNPY_HAVE_SSE -DNPY_HAVE_SSE3 -MD -MQ numpy/_core/libnpymath.a.p/meson-generated_ieee754.c.o -MF numpy/_core/libnpymath.a.p/meson-generated_ieee754.c.o.d -o numpy/_core/libnpymath.a.p/meson-generated_ieee754.c.o -c numpy/_core/libnpymath.a.p/ieee754.c In file included from /usr/include/python3.9/Python.h:50, from ../numpy/_core/src/npymath/npy_math_common.h:4, from ../numpy/_core/src/npymath/ieee754.c.src:7: /usr/include/python3.9/pyport.h:230:10: fatal error: sys/select.h: No such file or directory 230 | #include <sys/select.h> | ^~~~~~~~~~~~~~ compilation terminated.
有没有人知道问题出在哪?
更奇怪的是,在虚拟环境外面的全局Python环境里我已经装了NumPy,但我完全忘了是怎么装的——Cygwin的安装器显示我不是从Cygwin仓库安装的它,而且最近尝试升级NumPy时也遇到了和上面一样的错误。
更新:感谢下面的回答。我发现问题在于Cygwin包管理器显示我已经安装了python39-numpy(我不太清楚python3-numpy是干嘛的,我没装过它)。我用的是Python 3.9,之所以遇到这个问题是因为我想安装gymnasium。gymnasium在Cygwin仓库里没有,所以我只能用pip安装。它本身有wheel包,但我的虚拟环境里的pip却没有安装wheel,反而开始编译这个包,过程中还要编译已经安装好的NumPy!我还需要其他像torch和hyperopt这样的Python包,它们也不在Cygwin仓库里。
不管怎样,用了15年Cygwin之后,我遗憾地放弃它转投WSL了,WSL用起来意外地顺畅,还能轻松访问我的Windows文件系统(唯一有点不稳定的是网络,但这可能是Symantec Endpoint防火墙导致的)。
备注:内容来源于stack exchange,提问作者Motorhead

