我想用setuptools
寫一個setup.py
文件。我的軟件包取決於tensorflow
,但有兩種不同的pip軟件包可滿足要求:tensorflow
和tensorflow-gpu
。如果我只將tensorflow
放入我的setup(..., install_requires=["tensorflow"])
,那麼如果用戶在其系統上安裝了tensorflow-gpu
pip軟件包,安裝將會失敗。如何通過pip包名指定setuptools的兩個備選需求?
imp
的模塊不能被用於檢查(如在此答案:How to check if a python module exists without importing it),因爲模塊的進口名稱爲tensorflow
無論用戶安裝的PIP包的。那麼setuptools(以及distutils)如何檢測安裝了哪個pip軟件包?我已經通過源頭挖掘了一下,但找不到它檢查的地方。
*請注意,我不打算在黑客中使用setuptools來接受。我只想知道它使用什麼方法來檢測包,因此我可以在我的setup.py
中使用相同的方法手動將install_requires參數設置爲正確的版本。 (即像這樣:Alternative dependencies (fall back) in setup.py)
是的,最後我做了這樣的事情......但這不可能是方法setuptools正在使用,因爲它是模塊特定的。它以某種方式檢查點數據庫嗎? –
沒有'點子數據庫'。我認爲setuptools和Co掃描站點包中的* .dist-info目錄。 – phd
應該指出的是,這個很好的答案不能縮放到輪子,這些輪子不能執行這種安裝時邏輯。你能做什麼,呃? 'setuptools'。 'setuptools'永遠不會改變。 –