簡體   English   中英

打包和構建 python 命名空間包

[英]Packaging and building python namespace packages

我想做什么?
擁有一台大型 package 和幾個可安裝部件,需要一起工作,但特定部件可以單獨使用。 我決定使用命名空間 package,因為它似乎可以滿足我的要求。

問題
我如何實際構建命名空間 package?

我的例子
我有一個以下命名空間 package,每個子包都包含一些此處未列出的模塊。 我正在使用setuptools

.
|-mypkg
  |- core
  |    |- setup.py
  |    |- mynmspc
  |         |- util
  |- compute
  |    |- setup.py
  |    |- mynmspc
  |         |- funcs
  |- plotting
       |- setup.py
       |- mynmspc
            |- graphs
- setup.py

現在我可以構建這個 package python setup.py bdist_wheel的輪子。 但是,如果我想自己安裝例如core子包,我是否必須為它創建另一個輪子? 如果我想讓用戶選擇安裝整個 package 或任何列出的子包,那么最佳實踐是什么? 有沒有辦法自動構建主package的所有嵌套輪子?

如果你想使用最新的 python 本地命名空間包來允許用戶安裝類似擴展的包( mypkg-coremypkg-compute ,...),你應該像這樣為每個 package 創建不同的文件夾

mypkg-core/
    mypkg/ # no __init__.py here
        core/
            __init__.py
        setup.py

mypkg-compute/
    mypkg/ # no __init__.py here
        compute/
            __init__.py
        setup.py

每個setup.py如下所示

from setuptools import setup, find_namespace_packages

setup(
    name='mypkg-core',
    ...
    packages=find_namespace_packages(include=['mypkg.*'])
)

您需要為每個 package 構建一個 whl。

通過此配置,用戶將能夠

pip install mypkg-core
pip install mypkg-compute

並通過相同的mypkg命名空間訪問它們:

import mypkg.core
import mypkg.compute

不要忘記在setup.py中為每個 subpkg 使用find_namespace_package中的setuptools

請始終參考有關本地命名空間包的官方文檔。 .

但是,我會建議一種更簡單的方法來分發您的 package,方法是將子包依賴項添加為與子包名稱分組的extras項。 這樣,用戶只有在安裝整個 package 時才能使用子包

pip install mypkg[compute]

暫無
暫無

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

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