كيف نظام إدارة الحزم (الكفاءة، يم، حمل) بناء أشجار اعتمادها؟
-
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 ++ شفرة المصدر تجميع. لذا يمكنك الرجوع أية مواد أخرى التي تتحدث عن هذا:)