2016-12-14 53 views
3

A wheel是分發預編譯包以便通過pip安裝的新方式。爲什麼「pip install lxml」不使用提供的輪子,並嘗試編譯?

lxml entry on pypi有輪子可用於「manylinux」。我正在運行Ubuntu。

但是,當我嘗試pip安裝lxml時,似乎無論如何嘗試編譯。任何想法爲什麼?

mktmpenv 
pip install lxml==3.6.4 

Collecting lxml==3.6.4 
    Using cached lxml-3.6.4.tar.gz 
Building wheels for collected packages: lxml 
    Running setup.py bdist_wheel for lxml 

    Complete output from command /home/harry/.virtualenvs/tmp-940224e01c89b3f0/bin/python3 -c "import setuptools;__file__='/tmp/pip-build-gxw05tyo/lxml/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /tmp/tmp78u4a871pip-wheel-: 
    Building lxml version .... 
    Building lxml version 3.6.4. 
    Building without Cython. 
    Using build configuration of libxslt 1.1.29 
    running bdist_wheel 
    running build 
    running build_py 
    creating build 
    creating build/lib.linux-x86_64-3.5 
[...etc] 

任何想法?

+0

一些模塊用C/C++代碼和作者決定不編譯它。你不要自己編譯 - pip會爲你做。我從來沒有在Linux Mint上編譯lxml的問題(基於Ubuntu 14.04) – furas

+0

如果你想預先定義lxml然後使用[Anaconda](https://docs.continuum.io/anaconda/pkg-docs) - 它會安裝Python和已經爲此Python版本預編譯了lxml和其他模塊。 – furas

+0

謝謝@furas,我實際上可以安裝這個軟件包,我的問題是關於爲什麼即使預編譯輪可用,pip也想編譯。澄清了我的帖子。 – hwjp

回答

2

謝謝大家!所以我想我找到了答案。實際上這裏有兩個問題,第一個是我最初遇到這個bug的時候,第二個是我創建最小再現器的時候(我在q中發佈的)。

  • 在最小的清樣,PIP被發現的來源的名爲.tar.gz緩存版本,而只是使用而不是在線檢查任何車輪。 (HT @oldmanuk和@furas發現這一點)。 Aaaaaaararably這是一個錯誤?無論如何,經驗教訓,我最小的repro不是。

  • 在原始問題中,我在Ubuntu Trusty。我知道老版本的pip不能很好地執行輪子(比較@lukasa,@_rami_)。我曾預料到過,並且在我的劇本中有一個pip install --upgrade pip。我沒有注意到的是,它實際上失敗的消息Not uninstalling pip at /usr/lib/python2.7/dist-packages, owned by OS(按this issue),所以我仍然在1.5.4的點,這是忽略輪子。

所以最終修復是手動強制PIP的重新安裝與

apt-get remove -y python-pip 
wget -q https://bootstrap.pypa.io/get-pip.py 
python get-pip.py # upgrade system pip to make sure we use wheels