【问题标题】:Trouble installing scipy in virtualenv on a amazon ec2 linux micro instance在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题
【发布时间】:2016-06-21 13:53:01
【问题描述】:

我已在亚马逊 ec2 微型实例 (Ubuntu 13.04) 上的默认 python 编译器中成功安装 scipy。但是我无法在 virtualenv 中安装 scipy

pip install scipy 以这个错误结束

scipy/sparse/sparsetools/csr_wrap.cxx: In function ‘void init_csr()’:

scipy/sparse/sparsetools/csr_wrap.cxx:73303:21: warning: variable ‘md’ set but not used [-Wunused-but-set-variable]

c++: internal compiler error: Killed (program cc1plus)

Please submit a full bug report,

with preprocessed source if appropriate.

See <file:///usr/share/doc/gcc-4.7/README.Bugs> for instructions.

----------------------------------------
Cleaning up...
Command /home/ubuntu/pnr/bin/python -c "import setuptools;__file__='/home/ubuntu/pnr/build/scipy/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-t8Drvd-record/install-record.txt --single-version-externally-managed --install-headers /home/ubuntu/pnr/include/site/python2.7 failed with error code -9 in /home/ubuntu/pnr/build/scipy

Traceback (most recent call last):
  File "/home/ubuntu/pnr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.4.1', 'console_scripts', 'pip')()
  File "/home/ubuntu/pnr/local/lib/python2.7/site-packages/pip/__init__.py", line 148, in main
    return command.main(args[1:], options)
  File "/home/ubuntu/pnr/local/lib/python2.7/site-packages/pip/basecommand.py", line 169, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 53: ordinal not in range(128)

在任何人问之前。 pip freeze 默认编译器返回

Cheetah==2.4.4
Landscape-Client==12.12
M2Crypto==0.21.1
PAM==0.4.2
Pillow==2.0.0
PyYAML==3.10
Twisted-Core==12.3.0
Twisted-Names==12.3.0
Twisted-Web==12.3.0
apt-xapian-index==0.45
argparse==1.2.1
boto==2.3.0
chardet==2.0.1
cloud-init==0.7.2
configobj==4.7.2
distribute==0.6.34
distro-info==0.10
euca2ools==2.1.1
numpy==1.7.1
oauth==1.0.1
paramiko==1.7.7.1
prettytable==0.6.1
pyOpenSSL==0.13
pycrypto==2.6
pycurl==7.19.0
pygobject==3.8.0
pyserial==2.6
python-apt==0.8.8ubuntu6
python-debian==0.1.21-nmu2ubuntu1
requests==1.1.0
scipy==0.11.0
six==1.2.0
ssh-import-id==3.14
urllib3==1.5
virtualenv==1.10.1
wsgiref==0.1.2
zope.interface==4.0.5

pip freeze virtualenv 命令返回

Cython==0.19.2
Flask==0.10.1
Flask-Bootstrap==3.0.0.1
Flask-WTF==0.9.3
Jinja2==2.7.1
MarkupSafe==0.18
WTForms==1.0.5
Werkzeug==0.9.4
argparse==1.2.1
beautifulsoup4==4.3.2
itsdangerous==0.23
numpy==1.7.1
pymongo==2.6.2
requests==2.0.0
wsgiref==0.1.2

【问题讨论】:

  • 应该还有其他日志条目,包含实际被杀死的命令,能否提供一下
  • @alko 我已经更新了错误信息
  • 我感觉这个错误是由于微实例内存不足(512 MB)造成的。
  • 我已经在ec2.micro 实例上成功安装了不止一次scipy。
  • @alko 你是用 pip 安装的吗?

标签: python linux amazon-ec2 scipy virtualenv


【解决方案1】:

是的,512MB 不足以编译该 C++ 文件。

您最好的选择是将 Scipy 构建为二进制包(bdist,或eggs,或更现代的wheels),例如在具有兼容环境的另一台机器上通过python setupegg.py bdist_egg。例如,在虚拟机中使用与 EC2 实例类似的 Linux 版本。

一般来说,最好记住pip 安装包时,它会编译源文件。如果包不是很小,这是低效的,最好使用二进制包。 wheel 包格式应该和 pip 一起玩得很好。

【讨论】:

  • 不容易找到与 ec2.micro 相同的二进制鸡蛋。有什么方法可以设置编译参数?
【解决方案2】:

一种解决方案是在您的微实例上临时启用交换。如SO post 所述,通过以下方式启用 1gb 交换:

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1

swap 开启后,通过 pip 安装 scipy:

sudo apt-get install -y libatlas-base-dev gfortran python-dev build-essential g++
sudo pip install numpy
sudo pip install scipy

scipy 成功安装后,您可以通过以下方式禁用它:

sudo swapoff /var/swap.1
sudo rm /var/swap.1

【讨论】:

  • 同样适用于 DigitalOcean 512MB 机器。
  • 也适用于 Google Compute Engine f1-micro(1 个 vCPU,0.6 GB 内存)
  • 不适用于我的 Debian VPS!该死的那些传统主义者...... :-(
  • 如果与其他使用 scipy 的软件包(如 statsmodels)一起使用,如果您将它们安装在中间
【解决方案3】:

对我来说,错误略有不同。

Blas (http://www.netlib.org/blas/) libraries not found.

Directories to search for the libraries can be specified in the

numpy/distutils/site.cfg file (section [blas]) or by setting

the BLAS environment variable.

----------------------------------------
Cleaning up...
Command /home/kdixit/pyvirt/bin/python -c "import setuptools;__file__='/home/kdixit/pyvirt/build/scipy/setup.py';exec(compile(open(__file__).read().replace('\r\n

所以我不得不安装

sudo apt-get install libblas-dev

然后它起作用了。

【讨论】:

  • 是的,我在 DigitalOcean 的 Ubuntu 映像上遇到了同样的问题 - 似乎该软件包已从 libatlas3-base-dev 重命名为相同的减去 3。
  • 对我来说(在我的本地机器上)错误是:error: library dfftpack has Fortran sources but no Fortran compiler found。我之前安装了 scipy 的预编译版本,所以我没有检查包 gfortran 是否安装。寓意是:仔细检查您是否拥有所有依赖项
【解决方案4】:

scipy 编译t2.micro 期间,我遇到了虚拟内存不足错误,我认为numpy 编译得很好。无论如何,我想 Dolan Antenucci 的回答会解决我的问题,但我选择了另一条路线,妥协,这确实有效。

我正在运行一个 Ubuntu 实例,所以请记住这一点。

sudo apt-get -y install python-scipy && echo -e "\nok, installed python-scipy, continuing...\n"

# add scipy to the venv
mkdir ~/venv_PROJECT/lib/python2.7/site-packages/scipy/
ln -s /usr/lib/python2.7/dist-packages/scipy/* ~/venv_PROJECT/lib/python2.7/site-packages/scipy/

# add numpy to the venv
mkdir ~/venv_PROJECT/lib/python2.7/site-packages/numpy/
ln -s /usr/lib/python2.7/dist-packages/numpy/* ~/venv_PROJECT/lib/python2.7/site-packages/numpy/

# add PIL to the venv
mkdir ~/venv_PROJECT/lib/python2.7/site-packages/PIL/
ln -s /usr/lib/python2.7/dist-packages/PIL/* ~/venv_PROJECT/lib/python2.7/site-packages/PIL/

折衷方案是您将无法在不同的虚拟环境中使用不同的版本,并且您与 repo 中的版本相关联。

一句警告:

>>> import scipy
>>> scipy.__version__
'0.13.3'

>>> import numpy
>>> numpy.__version__
'1.8.2'

>>> from PIL import Image
>>> Image.VERSION
'1.1.7'

【讨论】:

    【解决方案5】:

    这对我有用:

    pip --no-cache-dir install scipy
    

    见:

    注意:

    • 适用于其他服务提供商、硬件、虚拟机和容器。
    • 如果 RAM 分配大小为 1GB
    • 只计算缓存目录内存使用和可用内存之间的差异

    【讨论】:

    • 这就像一个魅力。我能够将它安装在 t2 实例上。轻松融入我的代码管道。
    • 很好的解决方案,解决了我的 t2.micro AWS 实例上的错误。
    • 比接受的解决方案好得多,现在有点旧了。
    猜你喜欢
    • 2014-03-25
    • 2016-12-07
    • 1970-01-01
    • 2015-10-15
    • 2013-08-22
    • 1970-01-01
    • 2014-05-28
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多