使用pip和requirements.txt在弹性beanstalk上安装scikit-learn和scipy

时间:2015-11-19 14:19:08

标签: python amazon-web-services pip

当部署到弹性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将按字母顺序覆盖它。

1 个答案:

答案 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环境来验证这一点,然后再次运行该脚本。