[英]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-core
, mypkg-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.