pip завершается с AttributeError: у объекта 'module' нет атрибута '_init_cffi_1_0_external_module' - PullRequest
0 голосов
/ 05 января 2019

Я недавно обнаружил, что пипс был полностью сломан для меня. Это на Ubuntu Bionic 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'

Я видел другие ссылки, но они не соответствуют моей ситуации или не имеют ответов:

Как я могу это исправить?

1 Ответ

0 голосов
/ 05 января 2019

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

в какой-то момент cffi 1.1.2 из pip перезаписывается cffi 0.8.6 из пакета python-cffi. Так как криптография 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?
  • Существуют ли общие рекомендации по упаковке / зависимости, которые позволили бы избежать подобных проблем с пакетами?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...