2010-09-13 7 views
3

Je suis l'exemple de la meilleure réponse ici à un T, compilant avec Pyc.py.IronPython, importation de modules

Build Python scripts and call methods from C#

je reçois une exception à pyScope = pyEngine.ImportModule("MyClass");

no module named MyClass 

Je crois que ce soit un bug parfois recompilation avec Pyc.py produira un ImportModule dll reconnaît, mais d'autres fois, il ne le fait pas .

CONCLUSION: Comme noté ci-dessous par digEmAll, la compilation de modules avec Pyc.py à utiliser de cette manière produit des résultats aléatoires. Appelez clr.CompileModules manuellement à la place.

Répondre

7

OK, Je l'ai eu.

Le nom du module est le nom (sensible à la casse) du module .py d'origine, pas de la DLL compilée.

Je veux dire, si votre nom de module original était myClass.py, alors vous compilez dans MyClass.dll, vous devez ImportModule("myClass") pas ImportModule("MyClass")


EDIT:

le code précédent fait référence à la compilation suivante méthode:

import clr 
clr.CompileModules("CompiledScript.dll", "script.py") 

Sur Au contraire, en utilisant pyc.py, la DLL générée contient un module appelé __main__ au lieu du nom de fichier .py.

C'est très étrange ...

IIRC, en python un module lui-même appeler __main__ si elle est autonome en cours d'exécution (c.-à-pas appelé par une autre), mais je ne saisissons pas encore la connexion ...

+1

Ah, le module à importer prend toujours le nom du script à partir duquel l'assemblage a été créé, pas l'assemblage lui-même. Je peux confirmer que c'est vrai. –

+0

Merci, mais cela n'a pas résolu le problème car l'expression "MyClass" n'apparaît nulle part dans mon projet comme autre chose que "MyClass". Je pense que le commentaire de Jeff M concernant les versions est ma prochaine voie d'investigation. Quelle version de IronPython et .NET utilisez-vous? Je voudrais bien entendre les devs à ce sujet. – cory

+0

Essayez de renommer votre fichier .py différemment, mais pas MyClass.py. Quoi qu'il en soit, j'ai couru avec succès en ciblant à la fois .NET 2.0/4.0, avec IronPython.dll 2.6.10920.0 – digEmAll