python - pip 因 AttributeError 失败:“模块”对象没有属性“_init_cffi_1_0_external_module”
问题描述
我最近发现 pip 对我来说完全坏了。这是在 Ubuntu 仿生 18.04 上。
$ pip --version
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 22, in <module>
from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning
File "/usr/lib/python2.7/dist-packages/pip/_vendor/__init__.py", line 64, in <module>
vendored("cachecontrol")
File "/usr/lib/python2.7/dist-packages/pip/_vendor/__init__.py", line 36, in vendored
__import__(modulename, globals(), locals(), level=0)
File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/__init__.py", line 9, in <module>
File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/wrapper.py", line 1, in <module>
File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/adapter.py", line 4, in <module>
File "/usr/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl/requests/__init__.py", line 84, in <module>
File "/usr/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl/urllib3/contrib/pyopenssl.py", line 46, in <module>
File "/usr/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import crypto, SSL
File "/usr/lib/python2.7/dist-packages/OpenSSL/crypto.py", line 12, in <module>
from cryptography import x509
File "/usr/lib/python2.7/dist-packages/cryptography/x509/__init__.py", line 8, in <module>
from cryptography.x509.base import (
File "/usr/lib/python2.7/dist-packages/cryptography/x509/base.py", line 16, in <module>
from cryptography.x509.extensions import Extension, ExtensionType
File "/usr/lib/python2.7/dist-packages/cryptography/x509/extensions.py", line 18, in <module>
from cryptography.hazmat.primitives import constant_time, serialization
File "/usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/constant_time.py", line 9, in <module>
from cryptography.hazmat.bindings._constant_time import lib
AttributeError: 'module' object has no attribute '_init_cffi_1_0_external_module'
我看过其他参考资料,但它们与我的情况不符,或者没有答案:
- _init_cffi_1_0_external_module上的Python Cryptography运行时错误 - Thinbug
- 错误 #1512792 “Pip 因加密/cffi/openssl 错误而崩溃”:错误:python-pip 包:Ubuntu
- 错误 #1484870 “Devstack 在 Fedora 22 中不工作(python-cffi 也...”:错误:devstack
我怎样才能解决这个问题?
解决方案
在查看了更多信息后,我发现上面的 Fedora 错误报告中的信息确实有帮助:
在某些时候,来自 pip 的 cffi 1.1.2 被 python-cffi 包中的 cffi 0.8.6 覆盖。由于密码学 1.1.2 正在调用 cffi_1_0_external_module' 它不存在因此失败。
我四处寻找,发现我有一个过时的cffi
版本~/.local/lib/python2.7/site-packages/
(大概是pip install --user ...
几年前的)。
探索和检查版本的一般方法是:
>>> import cffi
>>> cffi.__version__
'0.8.6'
>>> cffi
<module 'cffi' from '$HOME/.local/lib/python2.7/site-packages/cffi/__init__.pyc'>
删除该目录修复了 pip,但可能与我很久以前安装的其他东西有关。
我还听说在某些相关情况下使用 easy_install (因为 pip 不起作用......)来升级 cffi 会有所帮助:
easy_install -U cffi
我仍然很好奇这里是否有关于如何在未来避免这种事情的重要课程。
- 为什么 cffi 在 pip 和外部包中都存在?
- 本地安装是否危险,因为它们在操作系统和 Python 升级之后仍然存在?
- 是否存在可以避免此类包依赖问题的通用打包/依赖最佳实践?
推荐阅读
- r - R 在 install.packages("rgl") 期间找不到现有的头文件 GL/gl.h
- cmake - ExternalProject_Add for Makefile 项目在构建过程中出错
- assembly - MIPS 中的数据危害(真正的依赖关系)
- pyspark - 使用 Pyspark 转换和重命名 1,000 多列的最有效方法?
- rust - 返回生锈的切片
- python - 将预先确定的是或否问题的答案存储到数据库的最佳/合乎逻辑的方法是什么
- python - 从python中的路径创建超链接
- ios - 有条件地启动适用于 iOS <14 的 WKWebView 或适用于 iOS 14+ 的 SwiftUI App?
- sql - oracle中字符串中第n次出现子字符串后的子字符串
- mysql - 在 PDO MySQL 中是否可以通过组数来限制,而不是总行数?