CFFI在Python(Linux)虚拟环境中失败 - 尝试在venv

时间:2018-05-07 00:46:05

标签: python cryptography cffi

在虚拟环境中安装cffi会遇到错误,但似乎已安装。这些错误是否真的很重要,可能导致它在安装加密时失败(参见下文)?

pip install cffi==1.11.5

  

下载/解压缩cffi == 1.11.5

     

正在下载cffi-1.11.5.tar.gz(438kB):438kB已下载
    运行setup.py(路径:/ [venv-install-directory] ​​/build/cffi/setup.py)egg_info for package cffi
  下载/解压缩pycparser(来自cffi == 1.11.5)
    正在下载pycparser-2.18.tar.gz(245kB):245kB下载
    运行setup.py(路径:/ [venv-install-directory] ​​/build/pycparser/setup.py)egg_info for package pycparser
      警告:在目录'tests'下找不到与'yacctab。'匹配的先前包含的文件       警告:在目录'tests'下找不到与'lextab。'匹配的先前包含的文件       警告:在目录'examples'下找不到与'yacctab。'匹配的先前包含的文件       警告:在目录'examples'下找不到与'lextab。'匹配的先前包含的文件   安装收集的软件包:cffi,pycparser
    运行setup.py安装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     在cffi == 1.11.5的安装记录中找不到.egg-info目录     运行pycparser的setup.py安装
      警告:在目录'tests'下找不到与'yacctab。'匹配的先前包含的文件       警告:在目录'tests'下找不到与'lextab。'匹配的先前包含的文件       警告:在目录'examples'下找不到与'yacctab。'匹配的先前包含的文件       警告:在目录'examples'下找不到与'lextab。'匹配的先前包含的文件       构建lexing /解析表
    在pycparser的安装记录中找不到.egg-info目录(来自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 :(得分:0)

本案的答案是升级pip - 在虚拟环境中。

完整说明:

  1. 创建虚拟环境。

    python3.4 -m venv [venv_name_here]

  2. 进入虚拟环境。

    cd [venv_name_here]

  3. 激活虚拟环境。

    source bin / activate

  4. <强> 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

    5. 完美安装,没有错误。

      请注意,您可能需要更改版本号,具体取决于&#34; pip freeze&#34;的输出。命令(即查看您的&#39; requirements.txt&#39;文件):

        

      pip freeze -l&gt; requirements.txt