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
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
Cela a fonctionné pour moi:
pip --no-cache-dir install scipy
Voir:
Erreur de mémoire lors de l'utilisation de pip install Matplotlib
https://github.com/pypa/pip/blob/9a23d4ed119327d3b823ec223aaead90964bac58/pip/basecommand.py#L56-L6
remarque:
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.
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é.
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'