كيف نظام إدارة الحزم (الكفاءة، يم، حمل) بناء أشجار اعتمادها؟

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

  •  10-07-2019
  •  | 
  •  

سؤال

وأنا أفهم المفاهيم الأساسية، ولكن لا يوجد أي الخوارزميات الخاصة المستخدمة أو ربما بعض بلوق، أوراق أو حتى الكتب حول هذا الموضوع لشخص ما بناء نظامهم الخاص؟ ويبدو أن هناك القليل جدا من المعلومات هناك على تنفيذ فعلا مثل هذا النظام.

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

المحلول

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

ولقد لم يحدد أي لغة، ولذا فإنني اخترت بيثون. مدخلات المتوقع هو ملف الخطوط في شكل "[اسم]: [مساحة تبعيات فصل]".

def load_depends(file):
  depends = {}
  for line in file:
    line = line.strip()
    if not line or line.startswith("#"):  # allow blanks and comments
      continue
    name, _, deps = line.partition(":")
    deps = deps.strip()
    assert deps, "invalid input"  # most basic input error-checking
    depends[name] = set(deps.split())
  return depends

وهذا الرمز يفترض أي بند غير المدرجة لديها صفر التبعيات، وكنت قد تجتاز شجرة لإضافة إدخالات فارغة إذا رغبت في ذلك. على الأقل يجب أن تحقق من تبعيات متكررة.

مثال:

>>> input = """\
... a: b c
... b: c
... c: d
... e: a
... """.split("\n")
>>> from pprint import pprint
>>> pprint(load_depends(input))
{'a': set(['b', 'c']),
 'b': set(['c']),
 'c': set(['d']),
 'e': set(['a'])}

[ملاحظة: أود أن أغتنم اختصار، منذ أن كنت حقا لا تحتاج إلى ملف الخطوط، ولكن iterable خطوط (والذي يلتقي الملف)، لذلك أنا تمرير قائمة الخطوط إلى وظيفة]

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

نصائح أخرى

والعديد من المفاهيم الأخرى تشمل أيضا أشجار التبعية، مثل قرار SNMP MIB، C / C ++ شفرة المصدر تجميع. لذا يمكنك الرجوع أية مواد أخرى التي تتحدث عن هذا:)

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