Je travaille sur une application qui intercale un tas de code jython et java. En raison de la nature du programme (en utilisant wsadmin) nous sommes vraiment limités à Python 2.1Comment appeler un script python dans un fichier jar en utilisant python?
Nous avons actuellement un jar contenant à la fois des sources java et des modules .py. Le code est actuellement invoqué en utilisant java, mais je voudrais supprimer ceci en faveur de la migration de toutes les fonctionnalités possibles vers jython. Le problème que j'ai est que je veux soit importer ou exécuter des modules python dans le fichier jar existant à partir d'un script jython appelant. J'ai essayé plusieurs façons différentes sans succès.
Ma structure de répertoire ressemble:
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
La 1ère approche que j'ai essayé était de faire les importations en provenance du pot. J'ai ajouté le jar à mon sys.path et essayé d'importer le module en utilisant à la fois importer com.example.action.myAction et importer myAction. Pas de succès cependant, même lorsque je mets init fichiers .py dans le répertoire à chaque niveau.
La deuxième approche que j'ai essayé était de charger la ressource en utilisant la classe java. J'ai donc écrit le code ci-dessous:
import sys
import os
import com.example.action.MyAction as MyAction
scriptName = str(MyAction.getResource('/com/example/action/myAction.py'))
scriptStr = MyAction.getResourceAsStream('/com/example/action/myAction.py')
try:
print execfile(scriptStr)
except:
print "failed 1"
try:
print execfile(scriptName)
except:
print "failed 2"
Les deux ont échoué. Je suis un peu perdu maintenant quant à la façon dont je devrais procéder. Des idées ?
acclamations,
Trevor
quoi de neuf le contenu de 'scriptName' et' scriptStr'? – badp
Dans le fichier jar. C'est sur le classpath quand j'invoque Jython. Si j'imprime sys.path, vous le voyez ici. Juste pour être complet, j'ai essayé d'ajouter le pot directement au code en utilisant sys.path.append() mais cela ne faisait aucune différence. – Trevor
Regardez 'zipimport' (http://docs.python.org/library/zipimport.html) et à l'exemple en bas. Lorsque vous écrivez 'init.py', voulez-vous dire' __init __. Py', n'est-ce pas? –