2015-06-26 145 views
0

我試圖在virtualenv中運行pip install libarchive,但它失敗:在Debian上的virtualenv中共享庫; PIP安裝失敗

(.env) $ pip install libarchive 
Downloading/unpacking libarchive 
    Downloading libarchive-0.4.3.tar.gz 
    Running setup.py egg_info for package libarchive 
Requirement already satisfied (use --upgrade to upgrade): nose in /var/tmp/.env/lib/python2.6/site-packages (from libarchive) 
Installing collected packages: libarchive 
    Running setup.py install for libarchive 
    Verifying that the library is accessible. 
    Library can not be loaded: libarchive.so: cannot open shared object file: No such file or directory 
    error: None 
    Complete output from command /var/tmp/.env/bin/python -c "import setuptools; 
__file__='/var/tmp/.env/build/libarchive/setup.py'; execfile('/var/tmp/.env/build/libarchive/setup.py')" install --single-version-externally-managed --record /tmp/pip-1hz9vY-record/install-record.txt --install-headers /var/tmp/.env/include/site/python2.6: 
    running install 

Verifying that the library is accessible. 

Library can not be loaded: libarchive.so: cannot open shared object file: No such file or directory 

error: None 

---------------------------------------- 
Command /var/tmp/.env/bin/python -c "import setuptools; __file__='/var/tmp/.env/build/libarchive/setup.py'; execfile('/var/tmp/.env/build/libarchive/setup.py')" install --single-version-externally-managed --record /tmp/pip-1hz9vY-record/install-record.txt --install-headers /var/tmp/.env/include/site/python2.6 failed with error code 1 
Storing complete log in /home/me/.pip/pip.log 

的錯誤信息是不是非常有幫助,但我想這個問題是二進制包libarchive13(或者,適用於Debian擠壓,libarchive1)沒有安裝。

我沒有這個系統的安裝權限(更少root),並且需要能夠部署到用戶處於類似困境的系統。有沒有辦法做到這一點?

(該libarchive documentation表明,有與.so符號鏈接Ubuntu的問題,但這種情況正在發生Debian的 - 反正,我無法找到有關這一爭端的任何公共bug報告有關,但切 - 安裝軟件包後,我可能需要額外的解決方法。)

回答

0

不是一個真正的答案,而是一個可能的解決方法的開始。

對於每個需要的庫,請下載本地.deb並解壓縮,然後將必要的文件複製到virtualenv中。我在這裏採取了一個快捷方式,簡單地省略了手冊usr/share/doc等。(當然,本地存儲並不一定要在virtualenv樹中,當然 - 在任何你有寫入權限的地方都可以,但是這對於保持它在virtualenv中)

vnix$ mkdir -p debs/x 

vnix$ fakeroot apt-get install -y --print-uris libarchive13 | 
> sed -n "s!.*'\(http://[^' ]*\.deb\)'.*!\1!p" | 
> xargs -r wget -nc -P debs 

vnix$ for deb in debs/*.deb; do 
> dpkg -x "$deb" debs/x 
> done 

vnix$ mv debs/x/lib/* debs/x/usr/lib/* virtualenv/lib 

# Then finally 
vnix$ export LD_LIBRARY_PATH=$PWD/virtualenv/lib${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH} 

最後一部分也許應該添加到您的activate腳本,因爲這裏建議:virtualenv that can find relocated libraires (like mysqlclient lib for MySQLdb)

僅僅複製圖書館在LD_LIBRARY_PATH目錄顯然是唯一可行的極其簡單庫。例如,如果deb程序包包含postinst腳本或其他某些配置操作,或者包含硬編碼/usr文件系統中的位置的代碼,則顯然會失敗。

(該fakeroot apt-get install --print-uris業務是非常難看,但我找不到更好的辦法來遞歸地從一個定義良好的本地配置的Debian鏡像站點下載的依賴性。請注意,它可以下載多個軟件包)。

+0

先粗在https://github.com/tripleee/virtualdeb;拉請求比歡迎。 – tripleee