مشكلة في استيراد وحدات الطرف الثالث عند استضافة IronPython في SL

StackOverflow https://stackoverflow.com/questions/1403384

سؤال

أنا أستضيف Python في تطبيق SL. في الأساس ، لدي خاصية مرفقة تتيح لك تمرير نص Python الذي يتم تنفيذه بعد ذلك في حدث التركيز المفقود للعنصر.

يعمل تكامل IPY بشكل جيد طالما لا أحتاج إلى أي واردات طرف ثالث. لقد قمت بنسخ حزمة FormenCode إلى مجلد حزم الموقع ضمن ملفات البرنامج Iron Python ... ثم حاولت استيراد FormenCode بشكل برمجي باستخدام scriptengine.importmodule و inline. في كل حالة لم يتم العثور على الوحدة.

رمز الإعداد الخاص بي لمضيف DLR هو ما يلي:

        var setup = new ScriptRuntimeSetup();
        setup.HostType = typeof(BrowserScriptHost);
        setup.LanguageSetups.Add(Python.CreateLanguageSetup(null));
        setup.Options["SearchPaths"] = new string[] { string.Empty };

        _runtime = new ScriptRuntime(setup);
        _engine = _runtime.GetEngine("Python");
        _scope = _engine.CreateScope();
        _engine.ImportModule("formencode");

سيكون موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

يبدو أن رمز استضافة DLR لديك جيدًا ، ولكن عندما تضع formencode خاطئ:

لقد قمت بنسخ حزمة Formencode إلى مجلد حزم الموقع ضمن ملفات البرنامج Iron Python

ال setup.HostType = typeof(BrowserScriptHost) يتسبب الخط في أن يبحث IronPython في ملف XAP لجميع عمليات نظام الملفات ، بما في ذلك "الاستيراد". ستحتاج إلى نسخ formencode.py في مشروع Silverlight الخاص بمضيفك ، وتأكد من تعيين "Copy Local" على "True" بحيث يجعله في طريقه إلى XAP. ثم استيراده سيعمل.

هذا متوقع لأن Silverlight لا يمكن القراءة من أي مكان على نظام ملفات نظام التشغيل الخاص بك ، لأنه يحتاج إلى العمل على جهاز الجميع :)

نصائح أخرى

لم أحاول القيام بذلك بالضبط ، لكنني وجدت أن تضمين مجموعات الطرف الثالث (محرك فيزياء فارس في حالتي) كان عليّ تضمين التجميع في XAP والرجوع إليه في App.Manifest.

لكن الشيء الذي اشتعلتني حقًا هو أنه كان عليّ أن أشير إلى التجميع باسمه القوي (الذي كان علي فعله فقط في SL ، محليًا يمكنني فقط استخدام اسم التجميع).

آمل أن يساعد هذا وسأكون مهتمًا برؤية كيف ينتهي بك الأمر بحلها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top