2017-05-08 59 views
0

有沒有什麼辦法可以告訴pip在不需要時跳過一些setup_requires依賴關係?有條件的setup需要setup.py中的依賴關係

在我的場景中,我在我的setup.py中聲明瞭pytest-runner作爲安裝依賴項(用於執行測試)。當我嘗試安裝我的軟件包(I.e:pip install my-package.tar.gz)時,它會下載pytest-runner,否則它將無法使用(*)。

在setup.py我:

... 
setup_requires=['pytest-runner', 'flake8'] 
... 

我想告訴setup.py只執行測試時只使用pytest亞軍。那可能嗎?

由於@deceze建議,這個聲明將工作:

setup_requires=['pytest-runner', 'flake8'] if 'test' in sys.argv else [] 

但我不希望添加邏輯的setup.py。

(*)環境非常有限,這就是爲什麼下載依賴項成爲障礙。

回答

0

rwt(與此運行)似乎是這樣做的首選方式。

它提供按需依賴解決方案,使得套件在解釋器會話期間可用。 其目標場景之一是:試跑者

安裝RWT(*)後,就可以執行負荷pytest亞軍模塊setup.py命令:

rwt pytest-runner -- setup.py test 

python -m rwt pytest-runner -- setup.py test 

(*),你仍然需要安裝不需要的依賴(即:rwt),但它似乎比安裝其他方面影響更小。

1

這是有道理的聲明,作爲一個extra

setup(
    ..., 
    extras_require=dict(
     tests=[ 
      'pytest-runner' 
     ] 
    ) 
) 

您特別安裝與pip install my-package[tests]

作爲替代方案:setup.py是一個全功能的Python程序...如果您可以以某種方式檢測您的環境,則可以動態決定是否將某些依賴項添加到需求列表中。

+1

將它們聲明爲* extra *將不起作用,因爲執行** python setup.py test **時它們將不可用,而且我不想在本地安裝它們。檢查環境絕對是一種選擇,我希望不是唯一的選擇。 –

相關問題