簡體   English   中英

如何在 Python 中創建命名空間包?

[英]How to create namespace packages in Python?

我有一個 Python 3 項目,其結構如下:

project/
|
+--root/
   |
   +--__init__.py
   |
   +--sub/
      |
      +--__init__.py
      |
      +--actualcode.py

我想使用“命名空間包”,以便我的庫與單獨項目中的其他相關庫共享一個公共命名空間。 導入語句應如下所示:

from root.sub.actualcode import something

根文件夾中的__init__.py文件包含以下用於創建命名空間 package 的語句:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

但是當我導入root.sub時我無法引用代碼。 它僅在我編寫時才有效:

from sub.actualcode import something # doesn't work with "root.sub..."!

我應該怎么做才能使用root作為命名空間?

命名空間包可以使用 分發構建。 訣竅是將以下行添加到setup的參數中:

setup(
  # ...
  namespace_packages  = ["root"]
)

問題中示例的 rest 是正確的。

我剛剛嘗試了您的示例,但它似乎像您希望的那樣工作:

    >>> from root.sub.actualcode import foo
    >>> foo()
    Bar!

我從包含root文件夾的目錄中運行了 Python 解釋器。 我創建了空的__init__.py文件,我的actualcode.py看起來像這樣:

    #!/bin/python3

    def foo():
        print("Bar!")

不同之處在於我的__init__.py文件是空的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM