在Elastic Beanstalk上使用pip和requirements.txt安装scikit-learn和scipy

1 投票
1 回答
2017 浏览
提问于 2025-05-10 15:34

在使用 Elastic Beanstalk 部署时,我总是遇到这个错误:

Partial import of sklearn during the build process.
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-build-Le610u/scikit-learn/setup.py", line 247, in <module>
      setup_package()
    File "/tmp/pip-build-Le610u/scikit-learn/setup.py", line 237, in setup_package
      .format(scipy_req_str, instructions))
  ImportError: Scientific Python (SciPy) is not installed.
  scikit-learn requires SciPy >= 0.9.
  Installation instructions are available on the scikit-learn website: http://scikit-learn.org/stable/install.html

我的 requirements.txt 文件里同时有 scikit-learn 和 scipy 这两个库。

为什么会出现这个问题呢?我不想手动安装这些包,我以为 pip 会自动处理安装顺序(现在它试图先安装 scikit-learn,再安装 scipy)。值得一提的是,使用相同的 requirements.txt 文件在我本地电脑上运行得很好。

我该怎么解决这个问题呢?

补充说明:如果我把 requirements.txt 文件里的顺序改成先 scipy 再 scikit-learn,就能正常工作。不过我还是想知道为什么反过来会失败,因为使用 pip freeze > requirements.txt 会按照字母顺序覆盖这个文件。

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

6

需求文件是一个包含要通过 pip 安装的项目列表的文件。

简单来说,需求文件就是把要用 pip 安装的内容写在一个文件里。

因此,你的 requirements.txt 文件里的内容会被 pip 按顺序处理。目前,pip 并没有真正的依赖关系解析,而且 scipy 在它的 setup.py 文件中缺少正确的 install_requires,所以你必须先告诉 pip 安装 scipy。(如果你感兴趣,可以看看 “setup.py 和 requirements.txt” 这篇文章

同一个 requirements.txt 文件在你本地电脑上能正常工作,可能是因为你在运行脚本之前已经安装了 scipy。你可以通过在你的电脑上使用 virtualenv 创建一个干净的 Python 环境,然后再运行脚本来验证这一点。

撰写回答