web-dev-qa-db-fra.com

Problème d'installation de scipy dans virtualenv sur une micro-instance Amazon ec2 linux

J'ai installé avec succès scipy dans le compilateur par défaut python sur une micro-instance Amazon ec2 (Ubuntu 13.04). Cependant, je ne peux pas installer scipy dans un virtualenv.

pip install scipy se termine par cette erreur

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

et

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)

Avant que quelqu'un ne demande. pip freeze pour les retours par défaut du compilateur

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 commande pour virtualenv renvoie

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
42

Une solution consiste à activer temporairement l'échange sur votre micro-instance. Comme décrit dans ce SO post , activez le swap de 1 Go via:

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

Une fois le swap activé, installez scipy via pip:

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

Une fois que scipy est installé avec succès, vous pouvez le désactiver via:

Sudo swapoff /var/swap.1
Sudo rm /var/swap.1
101
Dolan Antenucci

Cela a fonctionné pour moi:

pip --no-cache-dir install scipy

Voir:

remarque:

  • fonctionne pour d'autres fournisseurs de services, matériel, machines virtuelles et conteneurs.
  • if RAM taille d'allocation de 1 Go
  • il suffit de calculer la différence entre l'utilisation de la mémoire du répertoire en cache et le ram
28
jmunsch

Oui, 512 Mo ne suffisent pas pour compiler ce fichier C++.

Votre meilleure option est de construire Scipy comme un paquet binaire (bdist, ou eggs , ou, plus moderne roues ) par ex. via python setupegg.py bdist_Egg sur une autre machine avec un environnement compatible. Par exemple, utilisez une version Linux similaire à l'instance EC2 dans une machine virtuelle.

En général, il est bon de se rappeler que lorsque pip installe des packages, il compile les fichiers source. Si le package n'est pas minuscule, cela est inefficace et il vaut mieux utiliser des packages binaires. Le format du package wheel est censé bien fonctionner avec pip.

8
pv.

pour moi, l'erreur était légèrement différente.

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

J'ai donc dû installer

Sudo apt-get install libblas-dev

et puis ça a marché.

2
Kinjal Dixit

J'obtenais une erreur de mémoire virtuelle lors de la compilation de scipy sur un t2.micro, Je pense que numpy compilé très bien. Quoi qu'il en soit, je suppose que la réponse de Dolan Antenucci résoudrait mon problème, mais à la place, j'ai choisi une autre voie, un compromis, qui fonctionne.

J'exécute une instance Ubuntu alors gardez cela à l'esprit.

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/

Le compromis est que vous ne pourrez pas utiliser différentes versions entre différents environnements virtuels et que vous êtes lié à la version du référentiel.

Un mot d'avertissement:

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

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

>>> from PIL import Image
>>> Image.VERSION
'1.1.7'
1
Daniel F