Mycroft-core: إصدارات Python 3.9+

تم إنشاؤها على ١٣ يناير ٢٠٢١  ·  10تعليقات  ·  مصدر: MycroftAI/mycroft-core

ذكرت @ j1nx أنه تم رفع الاستثناءات أثناء تدريب Padatious على Python 3.9 على غرار

Exception in thread Thread-8:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 950, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 888, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.9/site-packages/padatious/training_manager.py", line 98, in train
    pool = mp.Pool()
  File "/usr/lib/python3.9/multiprocessing/context.py", line 119, in Pool
    return Pool(processes, initializer, initargs, maxtasksperchild,
  File "/usr/lib/python3.9/multiprocessing/pool.py", line 191, in __init__
    self._setup_queues()
  File "/usr/lib/python3.9/multiprocessing/pool.py", line 343, in _setup_queues
    self._inqueue = self._ctx.SimpleQueue()
  File "/usr/lib/python3.9/multiprocessing/context.py", line 113, in SimpleQueue
    return SimpleQueue(ctx=self.get_context())
  File "/usr/lib/python3.9/multiprocessing/queues.py", line 342, in __init__
    self._rlock = ctx.Lock()
  File "/usr/lib/python3.9/multiprocessing/context.py", line 67, in Lock
    from .synchronize import Lock
ImportError: cannot import name 'Lock' from partially initialized module 'multiprocessing.synchronize' (most likely due to a circular import) (/usr/lib/python3.9/multip
rocessing/synchronize.py)

يبدو أن المشكلة مرتبطة بتغيير في كيفية استيراد الوحدات / الحزم من Python 3.9 وما بعده انظر تقرير الخطأ .

يتوفر حل سريع وقذر للاختبار هنا . يقوم بشكل أساسي بتحميل الوحدات النمطية التي قد تكون غير مكتملة عند محاولة إنشاء كائن Pool.

من الصعب بعض الشيء معرفة ما يحدث بالضبط ولكن أحد الأسباب المحتملة هو msm ، والذي يستخدم أيضًا تجمع متعدد المعالجات (threadpool ولكنه نفس الفئة الأساسية) ... ما لم يتم إطلاق التدريب بطريقة أو بأخرى في سلاسل منفصلة بالإضافة إلى العمليات الداخلية في لكن هذا يبدو بعيد المنال.

لست متأكدًا من الإجراء الأكثر صحة هو أمرين يمكن اختبارهما:

  • قفل حول مكالمات msm.apply والتدريب المبتذل
  • انقل تنفيذ التدريب إلى نفس مؤشر الترابط مثل تنزيل المهارة (موضوع SkillManager)

لإعادة إنتاج
خطوات إعادة إنتاج السلوك:

  1. قم بتثبيت mycroft مع بيئة python3.9
  2. بدء تشغيل mycroft
  3. مشاهدة سجل المهارات
  4. تحقق من ImportError في المعالجة المتعددة

البيئة (يرجى استكمال المعلومات التالية):

  • أوبونتو 18.04.2018
  • نظام التشغيل Ubuntu 20.04.2018
  • افتح نظام تشغيل الصوت
Bug - complex

التعليق الأكثر فائدة

آمل أن يكون لدي قريبًا صورة OVOS منفصلة مع Python 3.9 مرة أخرى لاختبار ذلك. سأرى ما إذا كان بإمكاني إنشاء OVOS-Python3.9 نظيفًا على آلة بناء أخرى (بشكل طفيف). تقرير مرة أخرى في أقرب وقت ممكن.

ال 10 كومينتر

آمل أن يكون لدي قريبًا صورة OVOS منفصلة مع Python 3.9 مرة أخرى لاختبار ذلك. سأرى ما إذا كان بإمكاني إنشاء OVOS-Python3.9 نظيفًا على آلة بناء أخرى (بشكل طفيف). تقرير مرة أخرى في أقرب وقت ممكن.

يظهر أيضًا على Arch Linux

حاولت تثبيت mycroft مع Python 3.9:

عندما بدأت تشغيل mycroft cli حصلت على بعض الأخطاء:

Starting cli
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/pi/mycroft-core/mycroft/client/text/__main__.py", line 19, in <module>
    import curses
  File "/usr/local/lib/python3.9/curses/__init__.py", line 13, in <module>
    from _curses import *
ModuleNotFoundError: No module named '_curses'

من خلال process_utils.py التي تم إصلاحها ، حصلت على هذه الأخطاء:

Starting cli
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/runpy.py", line 188, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/local/lib/python3.9/runpy.py", line 111, in _get_module_details
    __import__(pkg_name)
  File "/home/pi/mycroft-core/mycroft/__init__.py", line 17, in <module>
    from mycroft.api import Api
  File "/home/pi/mycroft-core/mycroft/api/__init__.py", line 22, in <module>
    from mycroft.configuration import Configuration
  File "/home/pi/mycroft-core/mycroft/configuration/__init__.py", line 15, in <module>
    from .config import Configuration, LocalConf, RemoteConf
  File "/home/pi/mycroft-core/mycroft/configuration/config.py", line 23, in <module>
    from mycroft.util.json_helper import load_commented_json, merge_dict
  File "/home/pi/mycroft-core/mycroft/util/__init__.py", line 32, in <module>
    from .process_utils import (reset_sigint_handler, create_daemon,
  File "/home/pi/mycroft-core/mycroft/util/process_utils.py", line 7
    <!DOCTYPE html>

هل هناك حل بديل أم يجب إعادة ربط Python بـ 3.7 وإعادة تثبيت mycroft؟

يجب أن تعمل مع بيثون 3.9. لقد نجحت ، في الواقع ، مع Python 3.9. هناك خطأ في المعالجة المتعددة ، وأحتاج إلى قتل المهارات يدويًا بعد إيقاف الخدمات ، لأنها لم تتوقف بشكل صحيح ، لكنها تعمل بالتأكيد.
هل قمت بتثبيت قائمة اللعنات؟ يبدو أنه يشكو منه

يجب أن تعمل مع بيثون 3.9. لقد نجحت ، في الواقع ، مع Python 3.9. هناك خطأ في المعالجة المتعددة ، وأحتاج إلى قتل المهارات يدويًا بعد إيقاف الخدمات ، لأنها لم تتوقف بشكل صحيح ، لكنها تعمل بالتأكيد.

هل ترغب في إجراء 1+ لهذا السلوك. في الواقع ، مع توقف Python 3.9 ، يستغرق إيقاف خدمة مهارات mycroft وقتًا طويلاً (حتى انتهاء الوقت المحدد).

هل جرب أحد فرع الحل البديل الذي ذكرته في الأعلى؟ سيكون من المثير للاهتمام معرفة ما إذا كان ذلك يجعل الأشياء تعمل بشكل أفضل ، أم أنها فقط بالنسبة لي (TM) :)

ليس بنفسي حتى الآن. عندما يخرج إصدار OVOS من الباب ، سأعود إليه.

ليس أنا أيضًا ، هل يمكنني تطبيق هذا فقط أو أحتاج إلى القيام ببعض سحر git (إذا كان بإمكانك إرشادي لاختباره بسهولة دون الحاجة إلى إعادة تثبيت كل شيء ، فسيكون ذلك رائعًا ، وعادة ما أقوم بالاستنساخ والدفع والسحب ، لذا فإن عناصر git الأخرى لا تزال لغزا بالنسبة لي)

نعم هذا هو التغيير الكلي.

يمكنك فقط نسخها ولصقها. أو ما يلي يجب أن يعمل (مكتوب من الذاكرة دون اختبار لذلك قد يكون خطأ)

git checkout -b py39-test
git pull https://github.com/forslund/mycroft-core.git bugfix/mp-workaround

ثم للعودة إلى dev يمكنك القيام بذلك

git checkout dev

git remote add forslund https://github.com/forslund/mycroft-core.git
git pull forslund
git checkout forslund/bugfix/mp-workaround

وجدت أن هذا أسهل في حالة الاختبار ، وإعطاء الملاحظات ، وتغيير بعض الأشياء مرة أخرى. ثم كل ما عليك القيام به هو
git pull

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات