![](/img/trans.png)
[英]Is it possible to execute a bash script to download non-python dependencies on `pip install my-package`
[英]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
之前,是否有一種明智的方式來了解要安裝的構建依賴項? 我目前的做法是:
foo
的包。 pip install foo
foo
依賴於Python包bar
。
bar
構建失敗,請查看錯誤消息並猜測/ google我需要安裝的非Python依賴項。 sudo apt-get install libbaz-dev
sudo pip install bar
bar
成功。 sudo pip uninstall foo
步驟#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.