在Elastic Beanstalk上使用pip和requirements.txt安装scikit-learn和scipy
在使用 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 环境,然后再运行脚本来验证这一点。