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

标签 python cryptography cffi

在虚拟环境下安装cffi遇到错误,不过好像安装好了。这些错误真的很严重吗?在安装加密时可能导致它失败的错误(见下文)?

pip install cffi==1.11.5

Downloading/unpacking cffi==1.11.5

Downloading cffi-1.11.5.tar.gz (438kB): 438kB downloaded
Running setup.py (path:/[venv-install-directory]/build/cffi/setup.py) egg_info for package cffi
Downloading/unpacking pycparser (from cffi==1.11.5)
Downloading pycparser-2.18.tar.gz (245kB): 245kB downloaded
Running setup.py (path:/[venv-install-directory]/build/pycparser/setup.py) egg_info for package pycparser
warning: no previously-included files matching 'yacctab.' found under directory 'tests'
warning: no previously-included files matching 'lextab.
' found under directory 'tests'
warning: no previously-included files matching 'yacctab.' found under directory 'examples'
warning: no previously-included files matching 'lextab.
' found under directory 'examples'
Installing collected packages: cffi, pycparser
Running setup.py install for cffi
building '_cffi_backend' extension
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 -c c/_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 Could not find .egg-info directory in install record for cffi==1.11.5
Running setup.py install for pycparser
warning: no previously-included files matching 'yacctab.' found under directory 'tests'
warning: no previously-included files matching 'lextab.
' found under directory 'tests'
warning: no previously-included files matching 'yacctab.' found under directory 'examples'
warning: no previously-included files matching 'lextab.
' found under directory 'examples'
Build the lexing/parsing tables
Could not find .egg-info directory in install record for pycparser (from cffi==1.11.5)
Successfully installed cffi pycparser
Cleaning up...

这个问题很困惑,因为它在我的本地系统上有效,但是在创建虚拟环境时,在尝试安装密码时出现以下错误:

  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/

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

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

最佳答案

在这种情况下,答案是在虚拟环境中升级 pip。

完整说明:

  1. 创建虚拟环境。

    python3.4 -m venv [venv_name_here]

  2. 进入虚拟环境。

    cd [venv_name_here]

  3. 激活虚拟环境。

    源码/激活

<强>4。升级 pip。

pip 安装 -- 升级 pip

  1. 安装设置工具。

    pip install setuptools==39.1.0

  2. 安装 pyparser。

    pip 安装 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”命令的输出(即查看“requirements.txt”文件):

pip freeze -l > requirements.txt

关于python - CFFI 在 Python (Linux) 虚拟环境中失败——试图在 venv 中安装加密包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205819/

相关文章:

python - 覆盖测试 Django Rest Framework 的工具

python - 单元测试文件修改

java - 如何通过提供私钥来获取 RSA 公钥?

python - 在 CFFI 中创建类型为 `REAL (* vertices)[DIM]` 的 cdata

common-lisp - Common Lisp CFFI 和 C 退出代码

Python:如何将网页捕获为图像文件?

python - 如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

javascript - 使用 Node.js、Express 和 Trialpay 进行 HMAC MD5 验证

swift - 为什么 MD5 散列如此困难并且在 Swift 3 中?

python - 释放从 cffi 中的 c 函数传回的字符串的规范方法?