当部署到弹性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会为我排序安装顺序(它目前正在尝试在scipy之前安装scikit-learn)。值得注意的是相同的requirements.txt在我的本地计算机上运行得非常好。
我该怎么做才能解决这个问题?
编辑:如果我更改了requirements.txt中条目的顺序,那么scipy高于scikit-learn,它就可以了。我仍然想知道为什么这会失败相反,因为pip冻结&gt; requirements.txt将按字母顺序覆盖它。
答案 0 :(得分:6)
Requirements files是包含要使用pip
安装的项目列表的文件:
逻辑上,Requirements文件只是放在文件中的pip安装参数列表。
因此,您的requirements.txt
中的条目将由pip按顺序处理。就像现在一样,pip doesn't have true dependency resolution和scipy在setup.py中缺少正确的install_requires
,你必须首先告诉pip install scipy。 (如果您有兴趣,请参阅"setup.py vs requirements.txt" by Donald Stufft)
在本地计算机上运行相同requirements.txt
的原因可能是您在运行脚本之前安装了scipy。您可以通过计算机上的virtualenv
创建一个干净的python环境来验证这一点,然后再次运行该脚本。