"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحديد حزم مساحة الاسم لمشاركة الوحدة النمطية عبر المشاريع في بايثون؟

كيفية تحديد حزم مساحة الاسم لمشاركة الوحدة النمطية عبر المشاريع في بايثون؟

تم النشر بتاريخ 2024-11-08
تصفح:853

How to Define Namespace Packages for Cross-Project Module Sharing in Python?

تحديد حزم مساحة الاسم لمشاركة الوحدات عبر المشاريع

في Python، توفر حزم مساحة الاسم وسيلة لتنظيم التعليمات البرمجية ذات الصلة عبر مشاريع متعددة. لتعريف حزمة مساحة الاسم، من الضروري تجنب وضع ملفات __init__.py داخل دلائل حزمة مساحة الاسم.

تطور حزم مساحة الاسم

قبل Python 3.3، كانت حزم مساحة الاسم مطلوبة إعلان صريح باستخدام pkgutil.extend_path() أو pkg_resources.declare_namespace(). ومع ذلك، في Python 3.3 وما بعده، تم تقديم حزم مساحة الاسم الضمنية، مما أتاح إنشائها بسلاسة دون أي إعلان.

التفاعل مع الحزم العادية

يمكن أن تتعايش حزم مساحة الاسم مع الحزم العادية ، مما يسمح بوجود هيكل هرمي. عند استيراد وحدة نمطية ضمن حزمة مساحة اسم، تبحث Python داخل path للحزمة الأصلية، مما يوسع البحث إلى ما هو أبعد من sys.path القياسي.

pkgutil.extend_path() vs pkg_resources.declare_namespace()

بينما كل من pkgutil.extend_path() و . تم استخدام pkg_resources.declare_namespace() سابقًا لتعريف حزم مساحة الاسم، ويوصى باستخدام الأول لتوافقه المستقبلي مع حزم مساحة الاسم الضمنية.

بنية المثال

ضع في اعتبارك بنية الدليل التالية:

Package-1/namespace/
Package-2/namespace/
├── path1
│  └── package
│     ├── __init__.py
│     └── foo.py
├── path2
│  └── package
│     └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py

باستخدام إعلانات Extend_path الضرورية في ملفات __init__.py، ستنجح عمليات الاستيراد مثل namespace.foo وnamespace.bar وnamespace.baz.

بيان الافراج أعيد طبع هذه المقالة على: 1729575800 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3