Сбой CFFI в виртуальной среде Python (Linux) - попытка установить пакет криптографии в venv - PullRequest
0 голосов
/ 07 мая 2018

При установке cffi в виртуальной среде возникают ошибки, но, похоже, происходит установка.Являются ли эти ошибки действительно критическими, которые могут привести к сбою при установке криптографии (см. Далее ниже)?

pip install cffi==1.11.5

Загрузка / распаковка cffi == 1.11.5

Загрузка cffi-1.11.5.tar.gz (438 КБ): 438 КБ загружено
Запуск setup.py (путь: / [venv-install-directory] /build/cffi/setup.py) egg_info дляпакет cffi
Загрузка / распаковка pycparser (из cffi == 1.11.5)
Загрузка pycparser-2.18.tar.gz (245 КБ): 245 КБ загружено
Запуск setup.py (путь: / [venv-install)-directory] /build/pycparser/setup.py) egg_info для пакета pycparser
предупреждение: ранее не включенные файлы, соответствующие 'yacctab. ', найдены в каталоге 'tests'
предупреждение: нет ранее включенных файлов«lextab.
» найдено в каталоге «tests»
предупреждение: в каталоге «примеры» не найдено ни одного ранее включенного файла, соответствующего «yacctab. »; предупреждение: не найдено ни одного ранее соответствующего файла »lextab. примеры 'найдено в каталоге''
Установка собранных пакетов: cffi, pycparser
Запуск setup.py install для cffi
сборка расширения' _cffi_backend '
gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I / usr / local / lib / libffi-3.2.1 / include -I / [venv-install-directory] / include -I / usr / local / include / python3.4m -cc / _cffi_backend.c -o build / temp.linux-i686-3.4 / c / _cffi_backend.o
gcc -pthread -shared build / temp.linux-i686-3.4 / c / _cffi_backend.o -L /usr / local / lib -lffi -o build / lib.linux-i686-3.4 / _cffi_backend.cpython-34m.so Не удалось найти каталог .egg-info в записи установки для cffi == 1.11.5
Запуск установки.py install for pycparser
предупреждение: в каталоге не найдено ранее включенных файлов, соответствующих 'yacctab. ', 'тесты'
предупреждение: в каталоге не найдено ранее включенных файлов, соответствующих 'lextab.
'.тесты '
предупреждение: в каталоге не найдено ранее включенных файлов, соответствующих' yacctab. 'xamples '
предупреждение: в каталоге' examples 'не найдено ни одного ранее включенного файла, соответствующего' lextab.
'.
Создание таблиц лексинга / синтаксического анализа
Не удалось найти каталог .egg-info в записи установки дляpycparser (из cffi == 1.11.5)
Успешно установленный cffi pycparser
Очистка ...

Эта проблема вызывает недоумение, поскольку она работает в моей локальной системе, но при созданииВ виртуальной среде при попытке установить криптографию возникает следующая ошибка:

  File "[path-to-venv]/build/cryptography/src/_cffi_src/utils.py", line 57, in build_ffi
   ffi = FFI()

   File "[path-to-venv]/lib/python3.4/site-packages/cffi/api.py", line 46, in __init__
    import _cffi_backend as backend

ImportError: [path-to-venv]/lib/python3.4/site-packages/_cffi_backend.cpython-34m.so: undefined symbol: __syscall_error

Виртуальная среда буквально создает копию локальной среды, не так ли?

Так как же «_cffi_backend» не работает в виртуальной среде, когда нет проблем с самой установкой системы?Я не понимаю, как это могло произойти.

Кто-нибудь успешно справился с такой проблемой?Если у вас есть идеи или решение, пожалуйста, будьте конкретны, поскольку я уже потратил немало часов, пытаясь найти решения, которые до сих пор не работали.

Помимо прочего, я уже пытался скомпилировать и установить libffiот источника до создания виртуальной среды: https://sourceware.org/libffi/

Существуют ли другие альтернативы для создания виртуальных сред, которые не требуют переустановки каждого пакета - например, где можно просто использовать существующую установленную установку и скопировать ее напрямуюв виртуальную среду (или подобным образом, который позволяет избежать попадания в ад зависимости)?

Это кажется простой проблемой, которую нужно решить, как только вы поймете реальную проблему.Если я не могу понять это, я не могу развернуть свой проект, так как он решающим образом зависит от криптографии.Поэтому заранее спасибо за любые идеи, которые могли бы помочь решить эту проблему.

1 Ответ

0 голосов
/ 07 мая 2018

В этом случае ответом было обновление pip - внутри виртуальной среды.

Полная инструкция:

  1. создать виртуальную среду.

    python3.4 -m venv [venv_name_here]

  2. войти в виртуальную среду.

    cd [venv_name_here]

  3. активировать виртуальную среду.

    источник / активировать

4. обновить пункт.

pip install --upgrade pip

  1. установить setuptools.

    pip install setuptools == 39.1.0

  2. установить pyparser.

    pip install pyparser == 1.0
    pip install pyparsing == 2.1.0

  3. установить cffi.

    pip install cffi == 1.11.5

  4. установить криптографию.

    pip install cryptography == 2.2.2

Отлично завершает установку, без ошибок.

Обратите внимание, что вам может потребоваться изменить номера версий в зависимости от выходных данных команды "pip freeze" (т. Е. Посмотрите на ваш файл 'needs.txt'):

pip freeze -l> needs.txt

...