簡體   English   中英

如何`pip install`一個包含非Python依賴項的包?

[英]How to `pip install` a package that has non-Python dependencies?

許多python包都在非Python包上構建依賴關系。 我特別想到lxml和cffi,但這種困境適用於PyPI上的很多軟件包。 這兩個軟件包都對非Python軟件包(如libxml2-dev,libxslt-dev,zlib1g-dev和libffi-dev)具有未公開的構建依賴性。 lxml和cffi的網站聲明了一些這些依賴項,但似乎沒有辦法從命令行中解決這個問題。

因此,有數百個關於SO的問題采用這種一般形式:

pip install foo失敗並顯示錯誤:“致命錯誤:bar.h:沒有這樣的文件或目錄”。 我如何解決它?

這是對pip的誤用還是這是打算工作的? 在運行pip之前,是否有一種明智的方式來了解要安裝的構建依賴項? 我目前的做法是:

  1. 我想安裝一個名為foo的包。
  2. pip install foo
  3. foo依賴於Python包bar
    • 如果bar構建失敗,請查看錯誤消息並猜測/ google我需要安裝的非Python依賴項。
    • sudo apt-get install libbaz-dev
    • sudo pip install bar
    • 重復直到bar成功。
  4. sudo pip uninstall foo
  5. 重復整個過程,直到沒有錯誤消息。

步驟#4特別煩人。 顯然pip (版本1.5.4) 在任何依賴項之前首先安裝所請求的包。 因此,如果任何依賴項失敗,您不能只是要求pip再次安裝它,因為它認為它已經安裝。 也沒有選項只安裝依賴項,因此您必須卸載該軟件包然后重新安裝它。

是否有一些更智能的使用pip過程?

這實際上是關於建議使用apt-get的答案的評論,但我沒有足夠的聲譽點來留下一個。

如果你經常使用virtualenv ,那么通過apt-get安裝python-packages會變得很麻煩 ,因為你可以在系統范圍內安裝python軟件包時遇到神秘的錯誤,並且你的virtualenv中安裝的python軟件包試圖互相交互。 我發現的一件事確實有用,就是使用build-dep功能。 要構建matplotlib依賴項,例如:

sudo apt-get build-dep python-matplotlib

然后激活您的虛擬環境並執行pip install matplotlib 它仍將通過構建過程,但許多依賴項將為您處理。

這是在ubuntu中安裝R軟件包時的散熱庫所建議的類型。

對於大多數流行的軟件包,最近的ubuntu系統有一個解決方法。 例如,我想安裝matplotlib 當您訂購pip install matplotlib ,它通常會因缺少依賴性而失敗。

您可以使用apt-get install python-matplotlib 對於python3,您可以使用apt-get install python3-matplotlib

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM