Spack环境下安装pytetgen时无法识别已安装Cython模块的问题求助
Spack环境下安装pytetgen时无法识别已安装Cython模块的问题求助
我使用Spack 0.24.0.dev0创建了一个包含Python 3.13.0的环境,同时用Spack安装了包括Cython在内的多个Python模块。
现在我需要安装pytetgen模块。但当我尝试执行pip install pytetgen时,安装失败,提示找不到Cython模块。不过我可以在Python中手动加载Cython,而且执行pip install Cython时,系统也正确提示该模块已安装。我的PYTHONPATH变量似乎也正确指向了Spack安装的模块路径。
我和同事都束手无策,有没有人能帮我进一步排查问题?
我的Spack环境似乎包含了正确的Python和必要的模块:
$ spack find ==> In environment sierra_gcc ==> 10 root specs [+] openmpi@4.0.5 [+] py-matplotlib [+] py-pandas [+] py-scikit-learn [+] python [+] py-cython [+] py-numpy [+] py-pip [+] py-setuptools [+] seacas -- linux-rhel8-icelake / gcc@10.2.0 ----------------------------- autoconf@2.72 libffi@3.4.6 parallel@20240822 py-scikit-learn@1.5.2 automake@1.16.5 libidn2@2.3.7 parallel-netcdf@1.12.3 py-scipy@1.14.1 berkeley-db@18.1.40 libiconv@1.17 pcre2@10.44 py-setuptools@69.2.0 bison@3.8.2 libjpeg-turbo@3.0.3 perl@5.40.0 py-setuptools-scm@8.0.4 bzip2@1.0.8 libmd@1.0.4 pigz@2.8 py-six@1.16.0 c-blosc@1.21.5 libpciaccess@0.17 pkgconf@2.2.0 py-threadpoolctl@3.1.0 ca-certificates-mozilla@2023-05-30 libpng@1.6.39 pmix@4.2.2 py-tomli@2.0.1 catch2@3.7.1 libpthread-stubs@0.5 py-beniget@0.4.1 py-typing-extensions@4.12.2 cgns@4.4.0 libsigsegv@2.14 py-contourpy@1.3.0 py-tzdata@2023.3 cmake@3.31.0 libtool@2.4.7 py-cppy@1.2.1 py-versioneer@0.29 curl@8.10.1 libunistring@1.2 py-cycler@0.11.0 py-wheel@0.41.2 diffutils@3.10 libx11@1.8.10 py-cython@3.0.11 python@3.13.0 expat@2.6.4 libxau@1.0.11 py-flit-core@3.9.0 python-venv@1.0 findutils@4.9.0 libxcb@1.17.0 py-fonttools@4.39.4 qhull@2020.2 fmt@11.0.2 libxcrypt@4.4.35 py-gast@0.5.4 re2c@3.1 freetype@2.13.2 libxdmcp@1.1.5 py-joblib@1.2.0 readline@8.2 gcc-runtime@10.2.0 libxml2@2.13.4 py-kiwisolver@1.4.5 seacas@2024-08-15 gdbm@1.23 lz4@1.10.0 py-matplotlib@3.9.2 snappy@1.2.1 gettext@0.22.5 m4@1.4.19 py-meson-python@0.16.0 sqlite@3.46.0 git@2.47.0 matio@1.5.26 py-numpy@2.1.2 tar@1.34 glibc@2.28 meson@1.5.1 py-packaging@24.1 util-linux-uuid@2.40.2 gmake@4.4.1 nasm@2.16.03 py-pandas@2.2.3 util-macros@1.20.1 hdf5@1.14.5 ncurses@6.5 py-pillow@11.0.0 xcb-proto@1.17.0 hwloc@2.11.1 netcdf-c@4.9.2 py-pip@23.1.2 xextproto@7.3.0 inputproto@2.3.2 nghttp2@1.63.0 py-ply@3.11 xproto@7.0.31 kbproto@1.0.7 ninja@1.12.1 py-pybind11@2.13.5 xtrans@1.5.2 krb5@1.21.3 numactl@2.0.18 py-pyparsing@3.1.2 xz@5.4.6 libaec@1.0.6 openblas@0.3.28 py-pyproject-metadata@0.7.1 zlib-ng@2.2.1 libbsd@0.12.2 openmpi@4.0.5 py-python-dateutil@2.8.2 zstd@1.5.6 libedit@3.1-20240808 openssh@9.9p1 py-pythran@0.16.1 libevent@2.1.12 openssl@3.4.0 py-pytz@2024.2 ==> 122 installed packages ==> 0 concretized packages to be installed (show with `spack find -c`)
环境指向了正确的Python二进制文件:
$ which python ~/spack/var/spack/environments/sierra_gcc/.spack-env/view/bin/python
在Python中,我可以轻松加载包括Cython在内的模块:
$ python Python 3.13.0 (main, Dec 3 2024, 14:21:56) [GCC 10.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import numpy as np >>> from Cython import * >>>
PYTHONPATH看起来是正确的:
$ echo $PYTHONPATH /home/tvj/spack/var/spack/environments/sierra_gcc/.spack-env/view/lib:/home/tvj/spack/var/spack/environments/sierra_gcc/.spack-env/view/lib/python3.13/site-packages:.
当我执行pip install Cython时,系统显示该模块已安装:
$ pip install Cython Requirement already satisfied: Cython in ./spack/var/spack/environments/sierra_gcc/.spack-env/view/lib/python3.13/site-packages (3.0.11)
然而执行pip install pytetgen时却无法识别Cython模块:
$ pip install pytetgen Collecting pytetgen Using cached pytetgen-0.2.2.tar.gz (409 kB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [23 lines of output] Traceback (most recent call last): File "/home/tvj/spack/var/spack/environments/sierra_gcc/.spack-env/view/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module> main() ~~~~^^ File "/home/tvj/spack/var/spack/environments/sierra_gcc/.spack-env/view/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main json_out['return_val'] = hook(**hook_input['kwargs']) ~~~~^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/tvj/spack/var/spack/environments/sierra_gcc/.spack-env/view/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel return hook(config_settings) File "/tmp/pip-build-env-yzg25sy8/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 334, in get_requires_for_build_wheel return self._get_build_requires(config_settings, requirements=[]) ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-yzg25sy8/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 304, in _get_build_requires self.run_setup() ~~~~~~~~~~~~~~^^ File "/tmp/pip-build-env-yzg25sy8/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 522, in run_setup super().run_setup(setup_script=setup_script) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/tmp/pip-build-env-yzg25sy8/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 320, in run_setup exec(code, locals()) ~~~~^^^^^^^^^^^^^^^^ File "<string>", line 5, in <module> ModuleNotFoundError: No module named 'Cython' [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip. [notice] A new release of pip is available: 23.1.2 -> 24.3.1 [notice] To update, run: python3 -m pip install --upgrade pip
我尝试了各种变体命令,比如pip3 install pytetgen、python -m pip install pytetgen,但都得到相同的错误。
这看起来可能和类似的pip构建依赖识别问题相关,但添加setup_requires=['Cython']的解决方法对我不起作用。
我注意到pytetgen的安装脚本似乎使用了distutils,这会不会是问题所在?
备注:内容来源于stack exchange,提问作者Joseph Tipton




