簡體   English   中英

如何使用 build 和 pyproject.toml 強制平台輪?

[英]How to force a platform wheel using build and pyproject.toml?

我試圖強制我正在構建的 Python3 非通用輪子成為平台輪子,盡管在分發打包過程中沒有發生任何本機構建步驟。

輪子將包含一個特定於操作系統的共享庫,但該庫是由一個更大的構建系統構建並復制到我的 package 目錄中的,而我的 package 對此一無所知。 當我的 Python3 package 准備構建成一個輪子時,我的構建系統已經構建了原生共享庫並將其復制到 package 目錄中。

這篇SO 帖子詳細介紹了適用於現已棄用的setup.py方法的解決方案,但我不確定如何使用新的和現在標准的build / pyproject.toml系統來完成相同的結果:

mypackage/
  mypackage.py  # Uses platform.system and importlib to load the local OS-specific library
  pyproject.toml
  mysharedlib.so  # Or .dylib on macOS, or .dll on Windows

基於執行構建的主機操作系統,我希望生成的輪子是manylinuxmacoswindows

我用python3 -m build --wheel ,它總是發出mypackage-0.1-py3-none-any.whl

我必須更改什么才能強制構建發出平台輪?

至少一種解決方案是添加一個什么都不做的“虛擬”擴展,這足以讓wheel創建一個平台 wheel:

https://github.com/numenta/nupic.core/pull/774/files

不過,這個解決方案似乎不是最優的; 一個輪子不應該攜帶一些代碼,這些代碼只是為了說服它是特定於平台的。

鏈接的方法(為簡潔起見進行了修剪)是這樣的:

  setup(
    name="nupic.bindings",
    ext_modules=[Extension('nupic.dummy', sources = ['dummy.c'])], 
    ...

然后虛擬模塊定義為:


int main()
{
    return 0;
}

void initdummy() {}

請注意,此答案未明確使用pyproject.toml或調用build package,但我相信將此技術從setup.py遷移到新系統會很好。

(我將其作為答案發布但不接受它,因為我不想使用它,但它可能對其他人有幫助)

暫無
暫無

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

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