2010-06-14 7 views
1

J'ai installé matplotlib à l'aide du programme d'installation d'image de disque Mac pour MacOS 10.5 et Python 2.5. J'ai installé numpy puis essayé d'importer matplotlib mais j'ai eu cette erreur: ImportError: numpy 1.1 or later is required; you have 2.0.0.dev8462. Il semble que cette version 2.0.0.dev8462 serait plus tard que la version 1.1 mais je devine que matplotlib s'est confondu avec le ".dev8462" dans la version. Y at-il une solution de contournement à cela?Impossible d'importer matplotlib

+1

Numpy 2.0 n'est pas rétrocompatible avec matplotlib, et il * va * tomber en panne si vous essayez d'exécuter matplotlib dessus. Si vous voulez exécuter numpy 2. *, vous devrez reconstruire chaque paquet qui utilise numpy C API (matplotlib, scipy, etc ...). –

Répondre

1

Voici le code gênant situé dans Lib/site-packages/matplotlib/__init__.py dans ma distribution de python sur Windows

nn = numpy.__version__.split('.') 
if not (int(nn[0]) >= 1 and int(nn[1]) >= 1): 
    raise ImportError(
      'numpy 1.1 or later is required; you have %s' % numpy.__version__) 

Le problème est qu'il exige à la fois le premier à chiffres (séparés par des périodes) pour être supérieure ou égale à 1 et dans votre cas, le deuxième chiffre est un 2. vous pouvez contourner dans un certain nombre de façons, mais une façon est de changer l'instruction if pour

if not ((int(nn[0]) >= 1 and int(nn[1]) >= 1) or int(nn[0]) >= 2): 

ou vous pouvez simplement changer à:

if not (float('.'.join(nn[2:])) >= 1.1): 

qui pourrait être mieux.

+0

+1. Mais voici une version plus simple: '(int (nn [0]), int (nn [1]))> = (1, 1)'. En fait, les tuples se comparent à ce que l'on appelle "l'ordre du dictionnaire". – EOL

0

Après le commentaire de Justin ... voici le fichier équivalent pour Linux:

/usr/lib/pymodules/python2.6/matplotlib/__init__.py

modifier sudo que pour fixer la ligne gênant pour: sinon ((int (nn [0])> = 1 et int (nn [1])> = 1) ou int (nn [0])> = 2):

Merci Justin Peel!