建構可重新發行的二進位檔#
本節的目標讀者是任何想要建構 SciPy 並將其部署到自己機器以外任何地方的人 — 從發行版封裝者到想要建構 Wheel 以部署到其生產環境的使用者
當使用 python -m build
或 pip wheel
建構 SciPy Wheel 時,該 Wheel 將依賴外部共享程式庫(至少對於 BLAS/LAPACK 和 Fortran 編譯器執行時期程式庫,可能還有其他程式庫)。因此,這類 Wheel 僅能在建構它們的系統上執行。有關更多背景資訊,請參閱 pypackaging-native 內容中「建構和安裝或上傳產出物」 的部分。
因此,這樣的 Wheel 是產生可發行的二進位檔的中間階段。最終的二進位檔也可能是一個 Wheel — 在這種情況下,執行 auditwheel
(Linux)、delocate
(macOS)、delvewheel
(Windows) 或 repairwheel
(平台獨立) 以將所需的共享程式庫 vendor 到 Wheel 中。
最終的二進位檔也可能採用其他封裝格式(例如,.rpm
、.deb
或 .conda
套件)。在這種情況下,有特定於封裝生態系統的工具,可先將 Wheel 安裝到暫存區,然後使該安裝位置中的擴充模組可重新定位(例如,透過重寫 RPATH),然後將其重新封裝為最終的套件格式。
建構和執行時期依賴性#
建構 SciPy 所需的 Python 建構和執行時期依賴性可以在 pyproject.toml
metadata 中找到。請注意,對於 SciPy 的發行版本,依賴性可能會有上限。每個上限上方都有註解;在大多數情況下,封裝者可以自由移除或放寬這些上限(numpy
除外)。例如:
# The upper bound on pybind11 is preemptive only
"pybind11>=2.12.0,<2.13.0",
# ...
# 3. The <2.3 upper bound is for matching the numpy deprecation policy,
# it should not be loosened.
"numpy>=2.0.0rc1,<2.3",
非 Python 建構需求為
C、C++ 和 Fortran 編譯器
BLAS 和 LAPACK 程式庫
ninja
pkg-config
常見編譯器的最低版本在頂層 meson.build
檔案中強制執行。目前 LAPACK 的最低版本為 3.7.1。有關這些建構依賴性的更詳細資訊,請參閱 工具鏈路線圖。
從 Wheel 或已安裝的套件中移除測試套件#
預設情況下,已安裝的 scipy
版本包含完整的測試套件。該測試套件,包括資料檔案和編譯後的僅用於測試的擴充模組,在 Wheel 中佔用約 4.5 MB(對於 x86-64,截至 v1.14.0),在磁碟上佔用更多空間。在二進位檔大小很重要的情況下,封裝者可能希望移除測試套件。從 SciPy 1.14.0 開始,有一種方便的方法可以做到這一點,即使用 Meson 的安裝標籤 功能。這是一行程式碼:
$ python -m build -wnx -Cinstall-args=--tags=runtime,python-runtime,devel
注意
請注意,在上述命令中,-wnx
表示 --wheel --no-isolation --skip-dependency-check
。它假設封裝者已經設定了建構環境,這通常是發行版封裝的情況。安裝標籤功能在隔離建構中也同樣適用(例如 pip install scipy --no-binary -Cinstall-args=--tags=runtime,python-runtime,devel
)。
如果您想要為測試本身產生一個單獨的套件,例如名稱為 scipy-tests
,則編輯 pyproject.toml
以更改專案名稱
[project]
name = "scipy-tests"
然後使用以下命令建構:
$ python -m build -wnx -Cinstall-args=--tags=tests
上述命令將建構整個套件兩次;為了以快取方式重建,請使用 -Cbuild-dir=build
建構選項
$ $ # apply patch to change the project name in pyproject.toml
$ python -m build -wnx -Cbuild-dir=build -Cinstall-args=--tags=tests
最終結果看起來會像這樣
$ ls -lh dist/*.whl
... 20M ... dist/scipy-1.14.0-cp311-cp311-linux_x86_64.whl
... 4,5M ... dist/scipy_tests-1.14.0-cp311-cp311-linux_x86_64.whl