[英]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
基於執行構建的主機操作系統,我希望生成的輪子是manylinux
、 macos
或windows
。
我用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.