我想用 Python 分析近红外 (NIR) 光谱。我的光谱以 spc 文件格式 存储。所以我需要一个可以导入此类文件的工具。 “Pyspectra”似乎是一个很好的模块。但是,我无法在 Windows 10 计算机上使用 Python 3.12.5 和 pip 24.2 将其安装在全新的虚拟环境中。
pip install pyspectra
失败并显示错误消息:回溯的最后一行指出:
ModuleNotFoundError:没有名为“numpy”的模块。
我使用
pip install numpy
安装了 numpy,并验证它可以与 import numpy as np
一起使用。这里没问题。我还确保我位于希望安装 pyspectra 的同一个虚拟环境中。
但我仍然无法导入 pyspectra。 Pip 继续声称它找不到 numpy。
这可能是“pyspectra 0.0.1.2”和“numpy 2.1.2”之间的依赖问题吗?
供参考:这是我在Windows命令行上的代码
# Create and activate a virtual environment
C:\user\...\Desktop>python -m venv venv
C:\user\...\Desktop>venv\scripts\activate
# Import numpy (to make sure it is installed)
(venv) C:\user\...\Desktop>py -m pip install numpy
# Import pyspectra
(venv) C:\user\...\Desktop>py -m pip install pyspectra
Collecting pyspectra
Using cached pyspectra-0.0.1.2-py3-none-any.whl.metadata (12 kB)
Requirement already satisfied: numpy in c:\users\...\venv\lib\site-packages (from pyspectra) (2.1.2)
Collecting pandas (from pyspectra)
Using cached pandas-2.2.3-cp312-cp312-win_amd64.whl.metadata (19 kB)
Collecting spc-spectra (from pyspectra)
Using cached spc_spectra-0.4.0.tar.gz (8.6 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
╰─> [24 lines of output]
Traceback (most recent call last):
[...]
File "C:\Users\...\AppData\Local\Temp\pip-install-v_qa0rxl\spc-spectra_a351371d52ef45edbd585ef2843e5c1e\spc_spectra\spc.py", line 10, in <module>
import numpy as np
ModuleNotFoundError: No module named 'numpy'
[end of output]
编辑:重写问题以使其更容易理解。
我自己想出来了。我回答我自己的问题,以防其他人尝试从 Python 中的 SPC 文件导入近红外光谱。这也可以作为一个有启发性的示例,说明如果有人从使用 R 进行数据科学转向使用 Python 而不了解 R 的 CRAN 和 Python 的 PyPI 软件存储库之间的区别,会发生什么情况。
TL;DR:“PySpectra”已过时。使用“pyfasma-spc”代替。
问题
尽管与 numpy 无关,但这确实是一个不兼容问题。
PySpectra 需要安装“spc-spectra”。 spc-spectra 的 setup.py 文件与 Pip 版本 24.2 不兼容。我通过将 setup.py 的内容替换为以下代码,成功安装了该包的本地副本:
import setuptools
if __name__ == "__main__":
setuptools.setup()
然后我就可以通过
pip install -e /.../spc_spectra-0.4.0
安装该软件包。之后我也可以执行pip install pyspectra
而不会出现错误。
根本问题
重要的是要了解 R 的 CRAN 存储库和 Python 的 PyPI 的工作方式不同:
如果您有一个新任务(例如导入 SPC 文件)并简单地 pip install 您在 PyPI 上看到的下一个最佳软件包,您可能会面临安装过时代码或(在极少数情况下)甚至是完全恶意代码的风险。
PySpectra 于 2020 年发布,此后没有收到任何更新。所需的 spc-spectra 软件包已于 2018 年发布,并且尚未收到任何更新。可以肯定地假设这两个软件包都不再被积极维护。
好消息是:Python 中有一个用于处理 SPC 文件的更新包:pyfasma-spc
该软件包有详细记录,最后更新于 2024 年。使用 Pip 版本 24.2 进行安装即可。从 SPC 文件导入数据在我的计算机上运行良好。