Package numpy cassé ?

Bonjour,

J’ai installe python-matplotlib et python-numpy, mais “ca ne marche pas”:

[code]Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
[GCC 4.4.5] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.

import matplotlib.pyplot as plt
Traceback (most recent call last):
File “”, line 1, in
File “/usr/lib/pymodules/python2.6/matplotlib/init.py”, line 129, in
from rcsetup import defaultParams, validate_backend, validate_toolbar
File “/usr/lib/pymodules/python2.6/matplotlib/rcsetup.py”, line 19, in
from matplotlib.colors import is_color_like
File “/usr/lib/pymodules/python2.6/matplotlib/colors.py”, line 52, in
import numpy as np
File “/usr/lib/python2.6/dist-packages/numpy/init.py”, line 132, in
import add_newdocs
File “/usr/lib/python2.6/dist-packages/numpy/add_newdocs.py”, line 9, in
from lib import add_newdoc
File “/usr/lib/python2.6/dist-packages/numpy/lib/init.py”, line 4, in
from type_check import *
File “/usr/lib/python2.6/dist-packages/numpy/lib/type_check.py”, line 8, in
import numpy.core.numeric as _nx
File “/usr/lib/python2.6/dist-packages/numpy/core/init.py”, line 5, in
import multiarray
ImportError: No module named multiarray
[/code]

On dirait que multiarray est un module de numpty, mais dans ce cas pourquoi n’est-il pas dans le package ? J’ai la version 1:1.4.1-5
Il y a bien un multiarray.so, mais peut-il etre “importe” directement ?

Merci de toute aide ou indication !

Salut,

Un peu léger comme explication.

Quelle branche ? (Squeeze, Wheezy…)
Comment as-tu installé ?
Les lignes de code que tu donnes, elles proviennent d’ou ?

J’ai copie le log, qui est moins leger …
Ca provient d’un bete import dans l’interpreteur python.

J’ai installe les modules via synaptic. Je me disais qu’il fallait peut-etre generer ces fichiers .py dans une etape de “post install”, mais si c’est le cas je m’attendrais a ce que ce soit fait par l’installer. Mais je ne connais pas bien le processus d’import python. (J’ai essaye par exemple sans succes avec LD_LIBRARY_PATH=<la ou il y a le .so>).

La branche Debian je ne sais pas exactement car j’ai bricole par ci par la, et ca n’apparait pas clairement (a mon sens). Peut-etre squeeze/sid. Mais la version du paquet devrait etre la seule qui importe, non ? Je peux regarder celles d’autres paquets s’ils sont importants.

Merci !

Salut,
Je ne suis pas assez calé en python… Je ne vois nulle part de “module multiarray” dans les paquets…

As-tu essayé d’installer les paquets “suggérés” et “recommandés” (à l’installation de python-matplotlib ?

Paquets suggérés : python-gobject-dbg dvipng ipython librsvg2-common python-configobj python-excelerator python-matplotlib-doc python-scipy python-traits texlive-extra-utils texlive-latex-extra python-gtk2 python-wxgtk2.8 python-qt3 python-qt4 python-numpy-doc python-numpy-dbg python-nose python-dev gfortran tclreadline Paquets recommandés : python-glade2 python-tk

Il me manque juste gfortran et python-numpy-doc. Ils n’ont pas l’air de contenir ce fichier, au vu de leur nom et d’une recherche dans le contenu de packages. Je suis un peu juste en espace disque, alors j’essaye de limiter les installations.

Merci.

Re,

Effectivement…

Un problème de version (chemin ?) de python ?
Quelle est ta version de Python ?

J’ai decouvert qu’on pouvait donc bien faire “import” d’un .so, pourvu que celui-ci definisse les bonnes fonctions d’init qui vont bien pour python, et que le fichier se trouve quelque part dans le sys.path.

Mon probleme est donc que: soit le fichier n’est pas au bon endroit, soit le sys.path est mal renseigne:

[code]#locate multiarray.so
/usr/lib/debug/usr/lib/pyshared/python2.5/numpy/core/multiarray.so
/usr/lib/debug/usr/lib/pyshared/python2.6/numpy/core/multiarray.so
/usr/lib/pymodules/python2.5/numpy/core/multiarray.so
/usr/lib/pymodules/python2.6/numpy/core/multiarray.so
/usr/lib/pyshared/python2.5/numpy/core/multiarray.so
/usr/lib/pyshared/python2.6/numpy/core/multiarray.so
#python
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
[GCC 4.4.5] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.

import sys, pprint
pprint.pprint(sys.path)
[’’,
’/usr/lib/python2.6’,
’/usr/lib/python2.6/plat-linux2’,
’/usr/lib/python2.6/lib-tk’,
’/usr/lib/python2.6/lib-old’,
’/usr/lib/python2.6/lib-dynload’,
’/usr/local/lib/python2.6/dist-packages’,
’/usr/lib/python2.6/dist-packages’,
’/usr/lib/python2.6/dist-packages/PIL’,
’/usr/lib/python2.6/dist-packages/gst-0.10’,
’/usr/lib/pymodules/python2.6’,
’/usr/lib/pymodules/python2.6/gtk-2.0’,
’/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode’]
[/code]

Dans le path il y a /usr/lib/pymodules/python2.6 Alors que le fichier est dans /usr/lib/pymodules/python2.6/numpy/core

S’il y a des experts python dans la salle …
A votre bon coeur !

A noter qu’en trafficottant, on peut importer multiarray, mais pas via numpy:

[code]>>> import sys

sys.path.append(’/usr/lib/pymodules/python2.6/numpy/core/’)
import multiarray
import numpy
Traceback (most recent call last):
File “”, line 1, in
File “/usr/lib/python2.6/dist-packages/numpy/init.py”, line 132, in
import add_newdocs
File “/usr/lib/python2.6/dist-packages/numpy/add_newdocs.py”, line 9, in
from lib import add_newdoc
File “/usr/lib/python2.6/dist-packages/numpy/lib/init.py”, line 4, in
from type_check import *
File “/usr/lib/python2.6/dist-packages/numpy/lib/type_check.py”, line 8, in
import numpy.core.numeric as _nx
File “/usr/lib/python2.6/dist-packages/numpy/core/init.py”, line 6, in
import umath
ImportError: No module named multiarray
[/code]

J’ai progresse dans ma comprehension du probleme:

Soit A = /usr/lib/python2.6/dist-packages/
Soit B = /usr/lib/pymodules/python2.6/

Le paquet python-numpy m’a installe:
[ol]dans A: seulement les fichiers .py
dans B: les fichiers .py et .so[/ol]

Il se trouve que dans mon sys.path, A vient avant B.
Donc en faisant “import numpy.core”, python trouve A/numpy/core/init.py
Par la suite il cherche multiarray.so dans: A/numpy/core et dans B, mais pas dans B/numpy/core (ou il se trouve).

Pour faire provocateur, j’ai vraiment l’impression que le paquet numpy est incorrect ! Je vois 2 solutions a mon probleme:
1- traffiquer le sys.path pour placer B avant A. Mais alors qu’est ce que je ferai quand un autre package aussi pourri necessitera l’inverse. De plus, il faut faire la manip dans chaque script (ou dans l’environnement)
2- nettoyer A en supprimant les fichiers que numpy y a installes. C’est malheureusement ce qui me parait le moins sale

d’autres idees ? des commentaires ?
Merci

Cela est tout à fait normal de retrouver les packages et modules Python dans /usr/lib/pymodules et /usr/lib/python2.6/dist-packagages. Les fichiers *.py qui s’y trouvent ne sont que des liens symboliques vers les fichiers se trouvant dans /usr/share/pyshared (ceci permet à Debian d’avoir plusieurs versions de l’interpréteur Python d’installées et de “byte-compiler” les module Python avec toutes les versions supportées par ceux-ci).

Les versions de Python et python-numpy que tu utilises sont celles de Squeeze apparemment. Qu’en est-il de la version de python-matplotlib (celle de Squeeze est la 0.99.3-1) ?

Ton problème se produit à quel moment ? Lors de l’import de matplotlib.pyplot uniquement ?

Peux-tu exécuter cette ligne dans un shell ?

Le résultat sur ma machine :

Bonjour,

J’ai matplotlib version 0.99.3-1. Le probleme se manifeste en faisant simplement “import numpy”.
Mon sys.path est similaire au tien: dist-packages avant pymodules (cf un des post precedent).

Effectivement dans pymodules et dans dist-packages il s’agissait de symlinks, mais dans dist-packages il n’y avait pas ceux vers les .so (juste les .py).

J’ai donc “resolu” mon probleme en supprimant les symlinks numpy dans dist-packages, de facon a ce que python trouve tout dans pymodules (ou les symlinks vers les .so sont bien). J’ai fait ca par depit car ce processus d’installation, s’il est peut-etre flexible, n’a pas l’air infaillible, et surtout ne permet pas de debugger les problemes facilement (je n’ai aucune idee de qui cree ces symlinks, en tout cas ils n’apparaissent pas dans les fichiers pretendument contenus dans le package).

Merci

Tout comme toi, il n’y a pas de liens symboliques vers les .so de mon côté, pourtant le module numpy fonctionne bien. Étrange… :slightly_smiling:

Dans le doute, préfère une réinstallation du paquet posant problème pour que la mécanique post-installation se déclenche à nouveau (mais peut-être l’avais-tu déjà fait) :

Dans le cas de python-numpy, c’est python-support qui se charge de créer les liens symboliques et pré-compiler les *.py dans les différents répertoires. Un autre système existant est python-central.
Mais depuis peu ces deux technos sont dépréciées au profit de dh_python2/dh_python3 (DebHelper Python), simplifiant le packaging Python au sein de Debian.

Pour les répertoires, je crois que dist-packages existe depuis Python2.6, l’ancien répertoire étant site-packages (< Python2.5).
L’empaquetage de modules Python dans Debian se base sur l’outil standard de Python quand c’est possible (distutils, le fameux setup.py que l’on voit souvent). Seulement, tous les modules Python ne se basent pas sur distutils et continue de s’installer dans le site-packages. Pour le pymodules, aucune idée :slightly_smiling:

Tout comme toi, il n’y a pas de liens symboliques vers les .so de mon côté, pourtant le module numpy fonctionne bien. Étrange… :slightly_smiling:[/quote]

Alors je serais interesse par savoir ta sortie pour:

[code]>>> import sys

from pprint import pprint as pp
pp(sys.path)
import numpy
numpy.file
numpy.core.multiarray.file [/code]

[quote=“Keldath”]
Dans le doute, préfère une réinstallation du paquet posant problème pour que la mécanique post-installation se déclenche à nouveau (mais peut-être l’avais-tu déjà fait) :

Je ne me souviens plus, mais je pense que non. J’ai encore assez (trop?) d’estime pour linux, pour croire que si un truc plante, j’en serai au moins averti :slightly_smiling:

En tout cas merci pour les infos sur python-support etc. Ca me permettra d’aller plus loin dans mes investigations la prochaine fois (pour numpy j’ai assez donne). Y a-t-il un moyen de savoir quels scripts de post-install se lancent pour un package donne ?

Salut,

Hop, la sortie :

[code]>>> import sys

from pprint import pprint as pp
pp(sys.path)
[’’,
’/usr/lib/python2.6’,
’/usr/lib/python2.6/plat-linux2’,
’/usr/lib/python2.6/lib-tk’,
’/usr/lib/python2.6/lib-old’,
’/usr/lib/python2.6/lib-dynload’,
’/usr/local/lib/python2.6/dist-packages’,
’/usr/lib/python2.6/dist-packages’,
’/usr/lib/python2.6/dist-packages/gst-0.10’,
’/usr/lib/pymodules/python2.6’,
’/usr/lib/pymodules/python2.6/gtk-2.0’,
’/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode’]

import numpy
numpy.file
’/usr/lib/pymodules/python2.6/numpy/init.pyc’

numpy.core.multiarray.file
’/usr/lib/pymodules/python2.6/numpy/core/multiarray.so’[/code]

[quote]Y a-t-il un moyen de savoir quels scripts de post-install se lancent pour un package donne ?[/quote]Oui, il s’agit du script postinst contenu (si c’est nécessaire) dans chaque paquet binaire Debian.
Pour récupérer le paquet binaire :

Dans l’archive, répertoire DEBIAN, tu y verras le script postinst (généré automatiquement lors de la construction du paquet par python-support dans le cas de python-numpy) :

[code]#!/bin/sh
set -e

Automatically added by dh_pysupport

if which update-python-modules >/dev/null 2>&1; then
update-python-modules python-numpy.public
fi

End automatically added section[/code]

update-python-modules (qui fait partie de python-support) se charge de créer les liens symboliques et de byte-compiler les modules Python indiqués dans le fichier python-numpy.public se trouvant dans /usr/share/python-support/.

Alors tu n’as pas de fichier/lien /usr/lib/python2.6/dist-packages/numpy/core/init.py ?

Je n’ai même aucun package numpy dans /usr/lib/python2.6/dist-packages/