Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencipta Pakej Ruang Nama untuk Pelbagai Produk Python?

Bagaimana untuk Mencipta Pakej Ruang Nama untuk Pelbagai Produk Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-22 14:57:02656semak imbas

How to Create Namespace Packages for Multiple Python Products?

Mentakrifkan Pakej Ruang Nama untuk Pelbagai Produk Python

Dalam Python, pakej ruang nama membolehkan pengedaran perpustakaan berkaitan dalam muat turun berasingan. Ini membolehkan berbilang produk Python mentakrifkan modul dalam ruang nama yang sama.

Tinjauan Keseluruhan Masalah

Bagaimanakah kita boleh mencipta pakej ruang nama dengan berkesan yang membolehkan lebih daripada satu produk Python mentakrifkan modul dalam ruang nama itu?

TL;DR

Dalam Python 3.3 dan ke atas, pakej ruang nama tersirat mengurangkan keperluan untuk sebarang langkah khas. Dalam versi terdahulu, menggunakan penyelesaian pkgutil.extend_path() disyorkan berbanding pkg_resources.declare_namespace() kerana keserasiannya dengan pakej ruang nama tersirat.

Penyelesaian Terperinci

Sebelum Python 3.3, pkg_resources Fungsi .declare_namespace() telah digunakan untuk mencipta pakej ruang nama. Walau bagaimanapun, dengan pengenalan pakej ruang nama tersirat dalam Python 3.3, kaedah pkgutil.extend_path() telah menjadi pendekatan pilihan. Pendekatan ini juga boleh mengendalikan kedua-dua pakej ruang nama tersirat dan eksplisit, menjadikannya kalis masa hadapan.

Kaedah extend_path() mengubah suai atribut __path__ bagi pakej biasa sedia ada untuk memasukkan laluan tambahan. Dengan cara ini, modul daripada pakej ruang nama yang berbeza boleh diimport di bawah ruang nama yang sama.

Sebagai contoh, pertimbangkan struktur direktori berikut:

├── path1
│   └── package
│       ├── __init__.py
│       └── foo.py
├── path2
│   └── package
│       └── bar.py
└── path3
    └── package
        ├── __init__.py
        └── baz.py

Untuk menjadikan direktori ini boleh diakses sebagai sebahagian daripada pakej ruang nama, kod berikut boleh ditambah pada fail __init__.py bagi pakej biasa dalam laluan1 dan laluan3:

<code class="python">from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)</code>

Dengan penyelesaian ini, import berikut akan berjaya:

<code class="python">import package.foo
import package.bar
import package.baz</code>

Menggunakan kaedah pkgutil.extend_path() membenarkan pakej ruang nama dibuat dan diurus dengan berkesan, membolehkan berbilang produk Python menggunakan kod dalam ruang nama yang sama.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Pakej Ruang Nama untuk Pelbagai Produk Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn