我有一個構建腳本(bash)利用python pip
從遠程獲取需求並將其放入虛擬環境。這個構建腳本可以由另一個腳本調用,這個腳本可以用任意數量的線程和不同的目標來調用它。這會導致每次調用重新運行pip。它會嘗試檢查相同虛擬環境的相同要求。pip線程安全嗎?
這是否與pip
不兼容?
我有一個構建腳本(bash)利用python pip
從遠程獲取需求並將其放入虛擬環境。這個構建腳本可以由另一個腳本調用,這個腳本可以用任意數量的線程和不同的目標來調用它。這會導致每次調用重新運行pip。它會嘗試檢查相同虛擬環境的相同要求。pip線程安全嗎?
這是否與pip
不兼容?
根據this issue,pip應該大部分是線程安全的,除非更新時存儲庫狀態發生更改。
pip
每次運行都是浪費帶寬和資源。
在virtualenv中安裝的軟件包保持安裝狀態。因此,您可以在存儲標誌的目錄中設置標誌或文件,在檢查標誌時您可以執行或不執行pip
。這是一個更好的解決方案。
不'wheel'照顧承認的? –
我不這麼認爲,每當我使用帶有requirements.txt文件的pip時,它會手動檢查所有包,它會先重新下載文件,然後如果它已經安裝,它將退出。但是下載發生。 –
這不會回答我的問題btw。我需要知道線程安全性。 –
由於此討論是谷歌的第一次打擊:點不應被視爲線程安全。另外,如果您沒有在導入pip包的線程中運行pip.main()
,則在pip中存在一個可能會導致異常情況時從線程內調用pip的異常。運行pip.main()
也不是受支持的API。唯一推薦的方法是調用subprocess.Popen()
或類似的點。
「資料庫狀態」是什麼意思? –
@BourgondAries那麼說你安裝一個包。對於第一個線程,軟件包版本爲1.0,但隨後更新了軟件包,第二個線程看到版本1.1。這是不太可能的,但如果發生的話可能會破壞事情。 – rth