Ubuntu

如何解決從 pip 安裝 pywfdb 失敗的問題?

  • April 6, 2019

條件:無法pywfdbpip

差異條件中排除庫/模組安裝失敗的故障:從 Ubuntu >=14.10 設置開始pywfdb
, 排除的依賴項失敗:upstart/在 Ubuntu 中systemd設計錯誤runit

  • 小路/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
  • PYTHONPATH 中的空白$HOME/.bashrc

具有大量日誌的依賴項和臟安裝的工作流程

  • Edwinksl 的提議:sudo apt-get install python-pyrex
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
python-pyrex
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.         2 not fully installed or removed.
Need to get 181 kB of archives.
After this operation, 996 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-pyrex all 0.9.8.5-2.1ubuntu1 [181 kB]
Fetched 181 kB in 0s (356 kB/s)      
Selecting previously unselected package python-pyrex.
(Reading database ... 434011 files and directories currently installed.)
Preparing to unpack .../python-pyrex_0.9.8.5-2.1ubuntu1_all.deb ...
Unpacking python-pyrex (0.9.8.5-2.1ubuntu1) ...
Processing triggers for doc-base (0.10.7) ...
Processing 1 added doc-base file...
Registering documents with scrollkeeper...
Processing triggers for man-db (2.7.5-1) ...
Setting up runit (2.1.2-3ubuntu1) ...
- -
Setting up python-pyrex (0.9.8.5-2.1ubuntu1) ...
- -
  • 安裝髒污的工作流程在安裝後不清理,看看pip試圖做什麼sudo -H pip install --no-clean pywfdb
Collecting pywfdb
 Using cached pywfdb-0.1.1.zip
Building wheels for collected packages: pywfdb
 Running setup.py bdist_wheel for pywfdb ... error
 Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-_Tu9q1/pywfdb/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /tmp/tmpemnpLdpip-wheel- --python-tag cp27:
 running bdist_wheel
 running build
 running build_py
 creating build
 creating build/lib.linux-x86_64-2.7
 creating build/lib.linux-x86_64-2.7/pywfdb
 copying pywfdb/__init__.py -> build/lib.linux-x86_64-2.7/pywfdb
 copying pywfdb/ecgcodes.py -> build/lib.linux-x86_64-2.7/pywfdb
 package init file 'example/__init__.py' not found (or not a regular file)
 creating build/lib.linux-x86_64-2.7/pywfdb/example
 copying example/readinfo.py -> build/lib.linux-x86_64-2.7/pywfdb/example
 copying example/plot.py -> build/lib.linux-x86_64-2.7/pywfdb/example
 running build_ext
 building 'pywfdb._pywfdb' extension
 creating build/temp.linux-x86_64-2.7
 creating build/temp.linux-x86_64-2.7/pywfdb
 creating build/temp.linux-x86_64-2.7/wfdb-10.4.4
 creating build/temp.linux-x86_64-2.7/wfdb-10.4.4/lib
 x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I./wfdb-10.4.4/lib -I/usr/include/python2.7 -c pywfdb/_pywfdb.c -o build/temp.linux-x86_64-2.7/pywfdb/_pywfdb.o -Wno-uninitialized -Wno-unused
 pywfdb/_pywfdb.c:15:22: fatal error: ecgcodes.h: No such file or directory
 #include "ecgcodes.h"
                       ^
 compilation terminated.
 error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

 ----------------------------------------
 Failed building wheel for pywfdb
 Running setup.py clean for pywfdb
 Failed to build pywfdb
Installing collected packages: pywfdb
Running setup.py install for pywfdb ... error
   Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-_Tu9q1/pywfdb/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-gdKcwF-record/install-record.txt --single-version-externally-managed --compile:
   running install
   running build
   running build_py
   creating build
   creating build/lib.linux-x86_64-2.7
   creating build/lib.linux-x86_64-2.7/pywfdb
   copying pywfdb/__init__.py -> build/lib.linux-x86_64-2.7/pywfdb
   copying pywfdb/ecgcodes.py -> build/lib.linux-x86_64-2.7/pywfdb
   package init file 'example/__init__.py' not found (or not a regular file)
   creating build/lib.linux-x86_64-2.7/pywfdb/example
   copying example/readinfo.py -> build/lib.linux-x86_64-2.7/pywfdb/example
   copying example/plot.py -> build/lib.linux-x86_64-2.7/pywfdb/example
   running build_ext
   building 'pywfdb._pywfdb' extension
   creating build/temp.linux-x86_64-2.7
   creating build/temp.linux-x86_64-2.7/pywfdb
   creating build/temp.linux-x86_64-2.7/wfdb-10.4.4
   creating build/temp.linux-x86_64-2.7/wfdb-10.4.4/lib
   x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I./wfdb-10.4.4/lib -I/usr/include/python2.7 -c pywfdb/_pywfdb.c -o build/temp.linux-x86_64-2.7/pywfdb/_pywfdb.o -Wno-uninitialized -Wno-unused
   pywfdb/_pywfdb.c:15:22: fatal error: ecgcodes.h: No such file or directory
   #include "ecgcodes.h"
                        ^
   compilation terminated.
   error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

   ----------------------------------------
   Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-_Tu9q1/pywfdb/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-gdKcwF-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-_Tu9q1/pywfdb/

打開

  • 為什麼為 pywfdb 建構輪子失敗
  • 為什麼從完整日誌中複製了以下錯誤?
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-_Tu9q1/pywfdb/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-gdKcwF-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-_Tu9q1/pywfdb/

故障排除方法

在 Adam 的第一個命令集沒有wfdb找到的地方點入本地模組

" https://stackoverflow.com/a/23885252/54964 "
['adium-theme-ubuntu==0.3.4', 'alabaster==0.7.8', 'auxlib==0.0.37', 'babel==2.3.4', 'backports-abc==0.4', 'backports.shutil-get-terminal-size==1.0.0', 'backports.ssl-match-hostname==3.5.0.1', 'beautifulsoup4==4.4.1', 'ccsm==0.9.12.2', 'certifi==2016.2.28', 'chardet==2.3.0', 'compizconfig-python==0.9.12.2', 'configparser==3.5.0', 'cycler==0.10.0', 'decorator==4.0.9', 'docutils==0.12', 'duplicity==0.7.6', 'entrypoints==0.2.2', 'enum34==1.1.6', 'functools32==3.2.3.post2', 'futures==3.0.5', 'html5lib==0.999', 'httplib2==0.9.1', 'imagesize==0.7.1', 'ipykernel==4.3.1', 'ipyparallel==5.0.1', 'ipython-genutils==0.1.0', 'ipython==4.2.0', 'ipywidgets==5.1.5', 'jinja2==2.8', 'jsonschema==2.5.1', 'jupyter-client==4.2.2', 'jupyter-core==4.1.0', 'lockfile==0.12.2', 'lxml==3.5.0', 'markupsafe==0.23', 'matlab-kernel==0.9.6', 'matplotlib==1.5.1', 'metakernel==0.13.0', 'mistune==0.7.2', 'nbconvert==4.2.0', 'nbformat==4.0.1', 'nose==1.3.7', 'notebook==4.2.1', 'numpy==1.11.0', 'pandas==0.18.1', 'path.py==8.2.1', 'pathlib2==2.1.0', 'pdfshuffler==0.6.0', 'pexpect==4.1.0', 'pickleshare==0.7.2', 'pillow==3.1.2', 'pip==8.1.2', 'ptyprocess==0.5.1', 'pycosat==0.6.1', 'pycurl==7.43.0', 'pygments==2.1.3', 'pygobject==3.20.0', 'pyicu==1.9.2', 'pymatbridge==0.5.2', 'pymysql==0.7.2', 'pyparsing==2.1.4', 'pypdf==1.13', 'python-dateutil==2.5.3', 'python-djvulibre==0.7', 'pytz==2016.4', 'pyxdg==0.25', 'pyyaml==3.11', 'pyzmq==15.2.0', 'qtconsole==4.2.1', 'requests==2.10.0', 'scour==0.32', 'setuptools==22.0.5', 'simplegeneric==0.8.1', 'singledispatch==3.4.0.3', 'six==1.10.0', 'snowballstemmer==1.2.1', 'sphinx==1.4.3', 'subprocess32==3.2.6', 'terminado==0.6', 'testpath==0.3', 'tornado==4.3', 'traitlets==4.2.1', 'unity-lens-photos==1.0', 'wheel==0.29.0', 'widgetsnbextension==1.2.3']

包/模組/庫資訊的測試命令不成功

  • pip search wfdb給了pywfdb (0.1.1) - Python interface to WFDB library所以我希望它也包括你可以的模組import
  • find /usr/local/lib/python2.7/dist-packages -name '*wfdb*'返回空白。
  • pip list |grep wfdb返回空白。
  • pip show pywfdb返回空白。

顯示模組未找到的測試程式碼

" http://www.pybytes.com/pywfdb/ "
import pywfdb

嘗試搜尋模組

  • 未作為普通 python 包安裝,因為這裡/usr/lib/python<version>/site-packages沒有描述;我搜尋了所有目錄(和)。/usr/local/lib/python2.7/``/usr/local/lib/python3.5/
  • 不在dist-packages基於答案。命令ls /usr/local/lib/python2.7/dist-packages/ | grep wfdb返回空白。
  • >>> import site; site.getsitepackages()給出輸出
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

ls /usr/local/lib/python2.7/dist-packages | grep wfdb和的空白輸出ls /usr/lib/python2.7/dist-packages | grep wfdb

系統:Linux Ubuntu 16.04 64 位

Linux 核心:4.6

Linux 核心選項:wl

硬體:Macbook Air 2013-mid

Python:2.7.11+

Pip:最新(8.1.2)pip install --upgrade pip返回Requirement already up-to-date: pip in /home/masi/.local/lib/python2.7/site-packages

最新的 pip模組pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U

Bash 之前完成:4.3.46( 1)-發布 (x86_64-pc-linux-gnu)

擴展上述答案,因為它為我指明了正確的方向,但跳過了一些關鍵步驟。

免責聲明:我不是經驗豐富的 Linux 使用者,但這適用於乾淨的 DigitalOcean Ubuntu 安裝。

  1. 依賴項(如果您還沒有):
  • $ sudo apt-get install python-dev python-pip python-pyrex unzip
  1. 下載WFDB原始碼www.physionet.org/physiotools/wfdb.tar.gz
  • 解壓到~/
  1. 編譯安裝WFDB C庫
  • @~/wfdb-10.5.24/wfdb$ ./configure --without-netfiles --static --static_only
  • http://www.pybytes.com/pywfdb/上的教程說你需要使用--without-netfilesswitch;我沒有使用它沒有任何問題*,*但是無法讓 python 包裝器從 physionet 導入,所以你應該)
  • @~/wfdb-10.5.24/wfdb$ sudo make install
  • @~/wfdb-10.5.24/wfdb$ make check
  1. 從下載 pywfdb 源pypi.python.org/packages/source/p/pywfdb/pywfdb-0.1.1.zip
  • 解壓到~/
  1. 編輯~/pywfdb-0.1.1/pywfdb/_pywfdb.c
  • 替換\*.h<wfdb/*.h>第 15、16、17 行
  1. 編輯~/pywfdb-0.1.1/setup.py
  • 替換./wfdb-10.4.4//home/username/wfdb-10.5.24/第 14、15 行(或您將其提取到的任何位置;~/別名對我不起作用)
  1. @/usr/include$ ln -s /usr/local/include/wfdb wfdb
  2. @~/pywfdb$ sudo python setup.py install
  3. (上面的答案到此結束,但我需要這個額外的步驟才能在python中實際導入lib)@/usr/lib/python2.7/dist-packages$ ln -s /usr/local/lib/python2.7/dist-packages/pywfdb pywfdb

引用自:https://unix.stackexchange.com/questions/294979