CFFI 在 Python (Linux) 虚拟环境中失败——尝试在 venv 中安装加密包

mur*_*r0m 6 python cryptography cffi

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

pip install cffi==1.11.5

下载/解压 cffi==1.11.5

下载 cffi-1.11.5.tar.gz (438kB): 438kB 下载
运行 setup.py (path:/[venv-install-directory]/build/cffi/setup.py) egg_info for package cffi
Downloading/unpacking pycparser (from cffi==1.11.5)
下载 pycparser-2.18.tar.gz (245kB): 245kB 下载
运行 setup.py (path:/[venv-install-directory]/build/pycparser/setup.py) egg_info 包 pycparser
警告: 没有先前包含的与 'yacctab.txt 匹配的文件。' 在目录 'tests' 下找到
警告:没有与 'lextab.txt 匹配的先前包含的文件。
' 在目录 'tests' 下找到
警告:没有先前包含的与 'yacctab.txt 匹配的文件。' 在目录 'examples' 下找到
警告:没有与 'lextab.txt 匹配的先前包含的文件。
' 在目录 'examples' 下找到
安装收集的包:cffi, pycparser
运行 setup.py install for 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 目录
运行 setup.py install 以获取 pycparser
警告:没有先前包含的与 'yacctab.dll 匹配的文件。' 在目录 'tests' 下找到
警告:没有与 'lextab.txt 匹配的先前包含的文件。
' 在目录 'tests' 下找到
警告:没有先前包含的与 'yacctab.txt 匹配的文件。' 在目录 'examples' 下找到
警告:没有先前包含的与 'lextab.txt 匹配的文件。
'在目录'examples'下找到
构建词法分析/解析表
在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
Run Code Online (Sandbox Code Playgroud)

虚拟环境实际上创建了本地环境的副本,不是吗?

那么当系统安装本身没有问题时,“_cffi_backend”如何在虚拟环境中不起作用?我一开始不明白这怎么会发生。

有没有人成功处理过这样的问题?如果您有想法或解决方案,请具体说明,因为我已经花了好几个小时来尝试目前尚未奏效的解决方案。

除此之外,我已经尝试在创建虚拟环境之前从源代码编译和安装 libffi:https ://sourceware.org/libffi/

是否有其他替代方法可以创建不需要重新安装每个包的虚拟环境——即在哪里可以使用您现有的已安装设置并将其直接复制到虚拟环境中(或避免陷入依赖地狱的类似方式)?

一旦您掌握了实际问题,这似乎是一个很容易解决的问题。如果我无法弄清楚这一点,我就无法部署我的项目,因为它在很大程度上取决于密码学。因此,在此先感谢您提供有助于解决此问题的任何想法。

mur*_*r0m 4

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

完整说明:

  1. 创建虚拟环境。

    python3.4 -m venv [venv_name_here]

  2. 进入虚拟环境。

    cd [venv_name_here]

  3. 激活虚拟环境。

    源文件箱/激活

4.升级点。

pip 安装 --升级 pip

  1. 安装安装工具。

    pip install setuptools==39.1.0

  2. 安装 pyparser。

    pip 安装 pyparser==1.0
    pip 安装 pyparsing==2.1.0

  3. 安装 cffi.

    pip 安装 cffi==1.11.5

  4. 安装加密技术。

    pip install cryptography==2.2.2

完美完成安装,没有任何错误。

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

pip freeze -l > 要求.txt