2015-07-03 224 views
1

我有一個構建腳本(bash)利用python pip從遠程獲取需求並將其放入虛擬環境。這個構建腳本可以由另一個腳本調用,這個腳本可以用任意數量的線程和不同的目標來調用它。這會導致每次調用重新運行pip。它會嘗試檢查相同虛擬環境的相同要求。pip線程安全嗎?

這是否與pip不兼容?

回答

0

根據this issue,pip應該大部分是線程安全的,除非更新時存儲庫狀態發生更改。

+0

「資料庫狀態」是什麼意思? –

+0

@BourgondAries那麼說你安裝一個包。對於第一個線程,軟件包版本爲1.0,但隨後更新了軟件包,第二個線程看到版本1.1。這是不太可能的,但如果發生的話可能會破壞事情。 – rth

0

pip每次運行都是浪費帶寬和資源。
在virtualenv中安裝的軟件包保持安裝狀態。因此,您可以在存儲標誌的目錄中設置標誌或文件,在檢查標誌時您可以執行或不執行pip。這是一個更好的解決方案。

+0

不'wheel'照顧承認的? –

+0

我不這麼認爲,每當我使用帶有requirements.txt文件的pip時,它會手動檢查所有包,它會先重新下載文件,然後如果它已經安裝,它將退出。但是下載發生。 –

+0

這不會回答我的問題btw。我需要知道線程安全性。 –

0

由於此討論是谷歌的第一次打擊:點不應被視爲線程安全。另外,如果您沒有在導入pip包的線程中運行pip.main(),則在pip中存在一個可能會導致異常情況時從線程內調用pip的異常。運行pip.main()也不是受支持的API。唯一推薦的方法是調用subprocess.Popen()或類似的點。

更多細節在這裏: https://github.com/pypa/pip/issues/3889