2011-02-14 75 views
8

我已經得到了一個Python包,它的setup.py具有通過常規方式聲明的依賴關係,在install_requires = [...]中。其中的一個包scikits.timeseries有一個setup.py,期望numpy已經被安裝,因此,我想用某種方式先安裝numpy。對於這種情況,一般來說,可以控制依賴項安裝的順序嗎?怎麼樣?在setup.py或pip需求文件中,如何控制安裝軟件包依賴關係的順序?

當前setup.py拉下依賴關係的順序(在arg install_requires中列出)看起來實際上是隨機的。另外,在setup.py設置(...)中,我嘗試使用arg:

extras_require={'scikits.timeseries': ['numpy']} 

...沒有成功,安裝依賴關係的順序不受影響。

我也嘗試設置一個點子需求文件,但是在那裏,點子的安裝依賴關係的順序與需求文件的行順序不匹配,所以沒有運氣。

另一種可能性是在setup.py的頂部附近進行系統調用,以在安裝(...)調用之前安裝numpy,但我希望有更好的方法。預先感謝您的幫助。

+2

對於任何人來此問題。 [這](https://github.com/scikit-learn/scikit-learn/issues/2569)是爲什麼numpy不包括作爲依賴。 – inf 2014-12-03 17:12:49

回答

5

如果scikits.timeseries需要numpy,那麼它應該聲明它爲依賴項。如果是這樣,那麼pip會爲你處理事情(我很確定setuptools也會,但我很久沒有使用它)。如果你控制scikits.timeseries,那麼你應該修復它的依賴聲明。

+0

這很有道理,謝謝。我不控制該代碼庫,但我會分叉它。 :) – limist 2011-02-18 04:25:20

+0

這將是很好的在你的答案中提到爲什麼scikit沒有明確的依賴:https://github.com/scikit-learn/scikit-learn/issues/2569 – 2017-01-10 23:26:26

0

您可以添加numpy的,以setup_requires部分:

setup_requires=['numpy'], 
0

使用setup_requires參數,例如安裝numpy之前scipy__builtins__.__NUMPY_SETUP__ = False鉤得到numpy的正確安裝:

setup(
    name='test', 
    version='0.1', 
    setup_requires=['numpy'], 
    install_requires=['scipy'] 
) 

def run(self): 
    __builtins__.__NUMPY_SETUP__ = False 
    import numpy 
相關問題