2010-06-25 21 views
3

Je travaille avec un produit qui a une instance Jython 2.2 intégrée. Il vient avec aucune des bibliothèques standard de Python. Quand je lance cette instance de Jython, le chemin par défaut estUtiliser urllib2 avec Jython 2.2

['./run/Jython/Lib', './run/Jython', '__classpath__'] 

j'ajouté tous les fichiers du module py de Python 2.2 dans le répertoire ./run/Jython/Lib, et je suis en mesure de les importer. Mais je veux utiliser urllib2 et je reçois cette erreur:

Traceback (innermost last): 
    File "<string>", line 2, in ? 
    File "./run/Jython/Lib/urllib2.py", line 90, in ? 
    File "./run/Jython/Lib/socket.py", line 41, in ? 
ImportError: no module named _socket 

Pour autant que je peux dire, le module _socket fait partie des bibliothèques lib-dynload Python (_socket.so). Est-ce que Jython peut utiliser ce fichier? J'ai essayé de le mettre sur mon chemin, mais cela n'a eu aucun effet.

Une recherche Google semble indiquer que d'autres personnes peuvent utiliser urllib et urllib2 avec Jython 2.2, mais je suis coincé J'ai aussi essayé des bibliothèques de modules à partir de versions plus anciennes de Python.

Merci!

Répondre

2

Andy,

Je suis un Jython propre 2.2.1 installer et exécuté avec succès le script suivant.

$ ./jython 
Jython 2.2.1 on java1.6.0_17 
Type "copyright", "credits" or "license" for more information. 
>>> import urllib2 
>>> f = urllib2.urlopen('http://www.python.org/') 
>>> print f.read(100) 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm 
>>> 

Je suis retourné vérifier la base de code de l'infrastructure Meandre. J'ai trouvé qu'une modification mineure a été introduite dans le chemin du Jython incorporé. Cependant, ce n'est pas le problème principal. Le problème principal est que je viens de réaliser que les modules système de Jython sont manquants sur les bundles de distribution Meandre.

Vous pouvez le réparer en copiant manuellement le contenu sur le

<JYTHON_HOME>/lib 

à

<MEANDRE_HOME>/run/Jython/Lib 

et redémarrez l'instance de serveur. Maintenant, les modules par défaut devraient être disponibles pour les composants de l'infrastructure. Laissez-moi savoir si cela vous va et je vais travailler pour obtenir ce corrigé bientôt.