Как установить ping cairocffi?

Как установить cairocffi через pip?

cairocffi - это замена на основе CFFI для Pycairo https://github.com/SimonSapin/cairocffi.

Я пытаюсь установить его на Ubuntu 14.04:

[email protected]:~$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS"
NAME="Ubuntu"
VERSION="14.04.2 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.2 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

Я попытался установить стандартную команду pip, но я получаю следующее:

$ sudo pip install cairocffi
The directory '/home/alvas/.cache/pip/log' or its parent directory is not owned by the current user and the debug log has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo -H flag.
The directory '/home/alvas/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo -H flag.
The directory '/home/alvas/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo -H flag.
Collecting cairocffi
  Downloading cairocffi-0.6.tar.gz (75kB)
    100% |████████████████████████████████| 77kB 34kB/s 
Collecting cffi>=0.6 (from cairocffi)
  Downloading cffi-0.9.2.tar.gz (209kB)
    100% |████████████████████████████████| 212kB 97kB/s 
Requirement already satisfied (use --upgrade to upgrade): pycparser in /usr/local/lib/python3.4/dist-packages (from cffi>=0.6->cairocffi)
Installing collected packages: cffi, cairocffi
  Running setup.py install for cffi
    Complete output from command /usr/bin/python3 -c "import setuptools, tokenize;__file__='/tmp/pip-build-d3kjzf__/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-ll323a3c-record/install-record.txt --single-version-externally-managed --compile:
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.4
    creating build/lib.linux-x86_64-3.4/cffi
    copying cffi/commontypes.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/lock.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/api.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/verifier.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/__init__.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/cparser.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/vengine_gen.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/gc_weakref.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/ffiplatform.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/model.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-3.4/cffi
    running build_ext
    building '_cffi_backend' extension
    creating build/temp.linux-x86_64-3.4
    creating build/temp.linux-x86_64-3.4/c
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python3.4m -c c/_cffi_backend.c -o build/temp.linux-x86_64-3.4/c/_cffi_backend.o
    c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory
     #include <ffi.h>
                     ^
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

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

Я проверил вручную разрешение и понял, что нет разрешения на запись. Почему это так? И почему не работает sudo для перезаписывания разрешения?

$ ls -la .cache/pip/log/
total 60
drwxrwxr-x 2 alvas alvas  4096 Feb  3 10:51 .
drwx------ 4 alvas alvas  4096 Apr 12 23:16 ..
-rw-rw-r-- 1 alvas alvas 49961 Apr 12 23:18 debug.log

Когда я попробовал sudo -H pip install cairoffi, я получил:

sudo -H pip install cairocffi
Collecting cairocffi
  Using cached cairocffi-0.6.tar.gz
Collecting cffi>=0.6 (from cairocffi)
  Downloading cffi-0.9.2.tar.gz (209kB)
    100% |████████████████████████████████| 212kB 29kB/s 
Requirement already satisfied (use --upgrade to upgrade): pycparser in /usr/local/lib/python3.4/dist-packages (from cffi>=0.6->cairocffi)
Installing collected packages: cffi, cairocffi
  Running setup.py install for cffi
    Complete output from command /usr/bin/python3 -c "import setuptools, tokenize;__file__='/tmp/pip-build-2sv6pbsp/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-xk4kkjrj-record/install-record.txt --single-version-externally-managed --compile:
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.4
    creating build/lib.linux-x86_64-3.4/cffi
    copying cffi/commontypes.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/lock.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/api.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/verifier.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/__init__.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/cparser.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/vengine_gen.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/gc_weakref.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/ffiplatform.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/model.py -> build/lib.linux-x86_64-3.4/cffi
    copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-3.4/cffi
    running build_ext
    building '_cffi_backend' extension
    creating build/temp.linux-x86_64-3.4
    creating build/temp.linux-x86_64-3.4/c
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python3.4m -c c/_cffi_backend.c -o build/temp.linux-x86_64-3.4/c/_cffi_backend.o
    c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory
     #include <ffi.h>
                     ^
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

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

Как предложил @MattDMo, я пробовал apt-get install libffi, но он все еще не работал:

[email protected]:~$ sudo apt-get install libffi libffi-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libffi

Но в менеджере пакетов нет libffi, поэтому я пробовал libffi-dev:

[email protected]:~$ sudo apt-get install libffi-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libffi-dev
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 99.8 kB of archives.
After this operation, 323 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main libffi-dev amd64 3.1~rc1+r3.0.13-12 [99.8 kB]
Fetched 99.8 kB in 1s (76.3 kB/s)     
Selecting previously unselected package libffi-dev:amd64.
(Reading database ... 492855 files and directories currently installed.)
Preparing to unpack .../libffi-dev_3.1~rc1+r3.0.13-12_amd64.deb ...
Unpacking libffi-dev:amd64 (3.1~rc1+r3.0.13-12) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Processing triggers for doc-base (0.10.5) ...
Processing 1 added doc-base file...
Processing triggers for install-info (5.2.0.dfsg.1-2) ...
Setting up libffi-dev:amd64 (3.1~rc1+r3.0.13-12) ...

Он успешно устанавливает libffi-dev, но cairoffi все еще не устанавливает:

[email protected]:~$ sudo -H pip install cairoffi
Collecting cairoffi
  Could not find a version that satisfies the requirement cairoffi (from versions: )
  No matching distribution found for cairoffi
[email protected]:~$ sudo -H pip3 install cairoffi
Collecting cairoffi
  Could not find a version that satisfies the requirement cairoffi (from versions: )
  No matching distribution found for cairoffi

Ответ 1

Правильно в сообщении об ошибке:

No package 'libffi' found

Вам нужно установить libffi и libffi-dev через менеджер пакетов дистрибутива (yum, apt-get, что угодно) до pip установка будет работать. Их имена могут быть очень незначительными с платформы на платформу.

Ответ 2

Для меня в Windows 10 с использованием python 3.5.3rc1, pip install cairocffi терпел неудачу. Выполнение pip install cffi было достаточным, чтобы это удалось.

Ответ 3

Не удалось заставить его работать, даже с установленной libffi6 libffi-dev. Наконец-то получил работать с:

pip3 install -U pip
pip3 install -U setuptools
pip3 install --no-cache-dir cairocffi

--no-cache-dir был трюк благодаря: https://github.com/Kozea/cairocffi/issues/125#issuecomment-476295293