根據Anaconda 的這篇博客文章,同時使用來自 pip 和 conda 的包是不安全的。
不幸的是,當 conda 和 pip 一起使用來創建環境時,可能會出現問題 [...] 一種可靠的方法是只使用 conda 包。
但是 conda 引入了一個功能,可以在環境 YAML 檔案中指定 pip 依賴項。
這個功能使用安全嗎?它會導致破壞環境嗎?應該怎么做才能確保不會發生這種情況?
uj5u.com熱心網友回復:
我認為說組合使用它們不安全是不公平的,人們一直都在這樣做。只是你必須小心。這篇博文有點過時了(我認為應該更新一下),但一些重要的細節沒有改變。只要您從 conda 環境檔案安裝和更新,并且更喜歡通過conda而不是pip在可能的情況下安裝軟體包,您應該沒問題。或者至少這是我一年來在多個專案中所做的事情。我在設定中遇到的問題總是由于生態系統中的其他問題,而不是pip:conda 環境檔案的功能。
這個功能使用安全嗎?
是的。我敢肯定有辦法搞砸它,我不太確定你在這里是如何定義“安全”的,但是像下面這樣的配置通常在生產中使用。
name: my-dev-env
channels:
- conda-forge
dependencies:
- python
- ...
- some_other_conda_package
- pip:
- some_pypi_package
這或多或少與沒有該pip:部分的情況相同,但呼叫pip并結束 install some_pypi_package。
它會導致破壞環境嗎?
是的,但你必須嘗試這樣做。這一點
大多數這些問題源于這樣一個事實,即 conda 與其他軟體包管理器一樣,控制未安裝的軟體包的能力有限。在 pip 之后運行 conda 可能會覆寫并可能破壞通過 pip 安裝的軟體包。同樣,pip 可能會升級或洗掉 conda 安裝的軟體包所需的軟體包。在某些情況下,這些損壞是裝飾性的,其中存在一些本應洗掉的檔案,但在其他情況下,環境可能會演變為無法使用的狀態。
仍然適用,如果在設定環境之后往往會發生這種情況,conda install xyz并且pip install xyz可以互換和隨意呼叫。pip:這與環境 YAML 中的部分不同,而且比它危險得多。
應該怎么做才能確保不會發生這種情況?
通常,如果您需要從 PyPI 中提取某些內容,但要在您的 conda 環境中對其進行安全管理:
- 避免手動
conda install和pip install呼叫。相反,從您的環境檔案更新,即conda env update --file env.yaml. 這將更新您的 conda 包并以(相對)安全的方式從 PyPI 重新安裝您需要的任何內容。您詢問通過pipconda 環境檔案安裝的事實意味著您已經走在正確的軌道上。 - 僅
pip當某些內容僅在 PyPI 上可用或出于其他原因只能通過pip. 例如,我使用它的git功能是在制作 conda 包之前安裝開發版本 - 盡管我不建議這樣做。 - Try moving some packages to conda - the blog post mentions this a few times.
conda-forgealso particular tries to make this easy.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443860.html
標籤:python-3.x 点子 康达
