2013-07-15 1 views
0

J'utilise le mathematical modelling packagecoopr.pyomo avec succès dans les deux fichiers de script et de manière interactive sur la console ipython. Cependant, si je tente un import coopr.pyomo simple dans un bloc-notes IPython commencé par ipython notebook, je reçois le message d'erreur suivant:Erreur d'importation dans le bloc-notes IPython uniquement avec coopr.pyomo

ImportError        Traceback (most recent call last) 
<ipython-input-1-ff8219fceacd> in <module>() 
----> 1 import coopr.pyomo 

ImportError: No module named pyomo 

Autres importations (les deux buitlins et emballages personnalisés) fonctionnent sans problème. Des idées où chercher une cause?

Environnement: Python 2.7 (32 bits) sur Windows 7, IPython 0.13.2, version 3.2.6148 de Coopr.

Edit: plus le diagnostic

En effet, coopr peut être importé, n'a pas encore __file__ attribut. Si j'affiche __dict__, je reçois le bon chemin:

{'__name__': 'coopr', 
'data': <module 'coopr.data' (built-in)>, 
'__doc__': None, 
'__path__': ['C:\\Python27\\lib\\site-packages\\coopr']} 

Si je navigue dans ce répertoire, je trouve que tous les sous-modules (par exemple coopr.pyomo) se trouvent dans le sous-répertoire src. data semble être un faux répertoire avec quelques fichiers test (test_baselines.py, test_perf.py) et exemple (diet1.py).

Edit # 2: il devient plus (je pense)

La question semble être causé par la façon particulière la façon dont les fenêtres d'installation des œuvres Coopr. Selon le Installation Notes, Coopr est encapsulé dans son propre bac à sable virtuel. Ceci est souligné par sa suggestion de répertoire d'installation par défaut CH: = C:/Packages/Coopr. La dernière fois, j'ai ignoré ce signe et l'ai simplement installé dans le dossier site-packages de Python. Maintenant, pour tester, j'ai réinstallé Coopr dans ce répertoire externe. Coopr/Pyomo peut toujours être importé avec succès à partir d'une session (I) Python, car sys.path est étendu par tous les sous-répertoires du répertoire CH/src/.

Toutefois, ces sous-répertoires sont différents des autres packages auxquels je suis habitué. Par exemple, src/coopr.pyomo contient uniquement un fichier setup.py, tandis que __init__.py se trouve dans CH/src/coopr.pyomo/coopr/pyomo. Alors que IPython semble être capable de trouver les paquets, le cahier IPython - bien que le chemin de recherche soit identique - semble être perturbé par la façon dont les paquets sont organisés.

+0

Comment avez-vous installé le paquet? Votre dernier paragraphe le décrit comme s'il avait été copié de la source directement dans le répertoire 'site-packages', et non en exécutant' python setup.py install'. – Evert

+0

En utilisant le [programme d'installation] officiel (https://software.sandia.gov/trac/coopr/downloader/download/file/52). J'ai réexaminé la procédure, voir Edit # 2 pour plus de détails. – ojdo

Répondre

0

Merci @Evert pour me diriger dans la bonne direction. Le problème a été causé par mon installation (négligente) de Coopr dans le répertoire site-packages de mon installation Python. Note à moi-même: ne faites pas cela. Alors que IPython lui-même a réussi à trouver les paquets, le chemin de recherche du bloc-notes d'IPython est devenu confus et a traité le répertoire coopr comme n'importe quel autre dossier de paquet.

Après réinstallant Coopr à son emplacement en dehors de mon suggéré répertoire d'installation de Python, supprimer le répertoire coopr de site-packages, suivi d'un redémarrage, tout fonctionne très bien.

+0

Glad cela a fonctionné. Je ne voulais pas jeter un coup d'œil sur l'installation moi-même, mais j'ai reculé devant l'inscription et l'installateur non-source. Il semble qu'ils utilisent une installation compliquée et l'installation; pas mon préféré. J'espère que ça continuera à marcher pour vous ;-) – Evert

+0

En effet. Je pense que l'installation basée sur pip pourrait fonctionner en principe, mais je m'abstiens de mettre en place un environnement de construction sous Windows. – ojdo

1

Je dois deviner, mais:

Essayez quelque chose comme ce qui suit dans le bloc-notes:

import coopr 
print coopr.__file__ 

Il semble que vous ramasser un module coopr différent de celui installé un, et L'attribut __file__ doit vous indiquer celui que vous utilisez. Peut-être qu'il y a un script appelé coopr; un tel script ne contiendrait pas de sous-module pyomo. Pourquoi cela se produirait-il uniquement dans le bloc-notes IPython et non dans la console IPython? Je suppose que, s'il existe effectivement un autre module coopr, il réside dans votre répertoire personnel ou ailleurs sur le système que le notebook IPython utilise comme "base".Le répertoire de base de la console IPython est l'endroit où vous l'avez démarré, mais le bloc-notes IPython est probablement découplé et possède un répertoire de base par défaut. Je ne sais pas comment le cahier est exécuté sous Windows, donc je ne peux pas vous dire ce que c'est par défaut et où chercher, mais le code ci-dessus pourrait très bien vous le montrer.

+0

Merci d'avoir deviné! Cette situation est assez frustrante. 'Coopr .__ file__' n'existe pas, mais j'ai ajouté le contenu de' coopr .__ dict__' à ma question plus quelques bits sur ma structure de répertoire. D'autres idées? – ojdo