Невозможно импортировать ssl в python3.6: ModuleNotFoundError: Нет модуля с именем '_ssl' [duplicate]

  1. Вы можете выполнить итерацию по каталогам, перечисленным в sys.path , чтобы найти все модули (кроме встроенных).
  2. Вероятно, это будет где-то около /usr/lib/pythonX.X/site-packages (опять же, см. sys.path). И рассмотрите возможность использования встроенного управления пакетами Python (вместо pip или easy_install , плюс yolk ), а пакеты в дистрибутивах Linux - поддерживаемые хранилища, как правило, устарели.
28
задан waiwai933 27 March 2011 в 05:43
поделиться

8 ответов

Вы построили Python из исходного кода? Если это так, вам понадобится опция --with-ssl при создании.

19
ответ дан Utku Zihnioglu 19 August 2018 в 19:20
поделиться
  • 1
    Я не могу вспомнить, построил ли я источник или нет. когда я добавляю -with-ssl? шаг ./configure, make или make install. когда я добавил это к ./configure, он сказал, что опция -with -ssl не была распознана – J Cooper 26 February 2011 в 19:43
  • 2
    Это вариант configure. В общем случае параметры конфигурации, параметры компиляции и т. Д. Являются параметрами configure - то, что он на самом деле делает, запускается во многих исходных файлах, делая текстовые замены (и часто создавая новые файлы заголовков), прежде время сборки. – jelford 7 January 2012 в 11:20
  • 3
    Я попытался установить Python 2.7 и --with-ssl, похоже, больше не распознается ... – Emmanuel 29 October 2013 в 14:32
  • 4
    Игнорируйте остальные советы в Интернете, это устарело. Теперь сборка расширений теперь управляется setup.py. Взломайте этот файл и не прикасайтесь к модулям / Setup.dist или --with-ssl. – ACyclic 8 March 2014 в 01:39
  • 5
    Вам больше не нужно --with-ssl при создании из исходного кода, поскольку по умолчанию он будет искать ssl. Убедитесь, что вы установили openssl-devel или libssl-dev (имя в зависимости от вашего дистрибутива) и / или взломали файл setup.py в качестве упомянутого @ACyclic, чтобы убедиться, что установка Python правильно указывает на заголовки ssl. – Phil 29 December 2016 в 19:49

Либо установите дополнительные пакеты для python-ssl, используя ваш диспетчер пакетов, либо перекомпилируйте Python, используя -with-ssl (для этого необходимо установить заголовки / библиотеки OpenSSL).

0
ответ дан Andreas Jung 19 August 2018 в 19:20
поделиться

Если вы построили Python из исходного кода, это зависит только от зависимостей: поскольку вы пропустили OpenSSL lib, python молча завершил установку модуля _ssl. Вы можете увидеть его в финальном отчете команды make:

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _ssl
_tkinter           bsddb185           dbm
dl                 gdbm               imageop
sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

Установка OpenSSL lib в любом из стандартных путей библиотеки (/usr/lib, /usr/local/lib ...) должна сделать трюк. Во всяком случае, так я и сделал: -)

11
ответ дан Emmanuel 19 August 2018 в 19:20
поделиться
  • 1
    в Linux-системе он будет работать, если вы установите openssl-devel, затем переконфигурируете и перекомпилируете. Не забудьте перекомпилировать или переустановить любые службы, которые могут потребоваться ssl (например, торнадо), чтобы получить ssl. – MrBooks 2 May 2014 в 21:05
  • 2
    на Ubuntu мне удалось получить зависимости, необходимые для компиляции необязательных модулей с помощью sudo apt-get build-dep python3.4 – gengkev 11 July 2015 в 21:51

Не связано с исходным вопросом, но поскольку это первый результат Google ... Я попал в это приложение Google AppEngine и должен был добавить:

libraries:
- name: ssl
  version: latest

в app.yaml за: https://cloud.google.com/appengine/docs/python/sockets/ssl_support

Пожалуйста, обратите внимание: это, похоже, работает до версии 2.4.9 Python но не для 2.7.10 или 2.7.11.

39
ответ дан HenryM 19 August 2018 в 19:20
поделиться
  • 1
    Работает, большое вам спасибо. – Ivan Vegner 14 February 2016 в 08:42
  • 2
    Я просто попробовал это, и он полностью разбил мое приложение настолько, что, прокомментировав это, я получаю новую ошибку, и если я оставлю это, я получаю ImportError: не могу импортировать имя RAND_egd – HenryM 3 March 2016 в 08:43
  • 3
    Я понизил мою версию python с 2.7.11 до 2.7.9, и теперь она работает – HenryM 3 March 2016 в 10:46
  • 4
    ^ - Это. Хороший улов. – Matti 8 June 2018 в 18:29

В Solaris 11 мне пришлось изменить setup.py, чтобы включить / opt / csw / include / openssl в SSL, включая путь поиска.

Уве

0
ответ дан hoover 19 August 2018 в 19:20
поделиться

У меня была точно такая же проблема. Я исправил его, не перестраивая python, следующим образом:

1) Найдите другой сервер с той же архитектурой (i386 или x86_64) и ту же версию python (пример: 2.7.5). Да, это трудная часть. Вы можете попробовать установить python из источников на другой сервер, если вы не можете найти какой-либо сервер с той же версией python.

2) На этом другом сервере проверьте, работает ли импорт ssl. Он должен работать.

3) Если он работает, попробуйте найти _ssl lilbrary следующим образом:

[root@myserver]# find / -iname _ssl.so
/usr/local/python27/lib/python2.7/lib-dynload/_ssl.so

4) Скопируйте этот файл на исходный сервер. Используйте ту же папку назначения: /usr/local/python27/lib/python2.7/lib-dynload/

5) Владелец и разрешения двойной проверки:

[root@myserver]# chown root:root _ssl.so
[root@myserver]# chmod 755 _ssl.so

6) Теперь вы должны иметь возможность импортировать ssl.

Это сработало для меня в среде CentOS 6.3 x86_64 с python 2.7.3. Также я установил python 2.6.6, но с ssl работал нормально.

Надеюсь, что это поможет.

5
ответ дан slowhandsolo 19 August 2018 в 19:20
поделиться
  • 1
    Это фактически устранило мою проблему с linuxbrew python 2.7.10, вам действительно не нужно искать другой сервер. Установите linuxbrew, а затем установите pyenv. Создайте такую ​​же версию python с помощью pyenv и скопируйте _ssl.so. Мне также нужно удалить _ssl_failed.so из каталога ~/.linuxbrew/Cellar/python/2.7.10/lib/python2.7/lib-dynload. – Ask and Learn 1 June 2015 в 05:29
  • 2
    Находка очень тяжелая, возможно, попробуйте: locate ssl.so или locate _ssl.so. – danger89 10 February 2017 в 16:28

Поскольку --with-ssl больше не распознается, я только что установил libssl-dev:

sudo apt-get install libssl-dev 

Чтобы перезапустить make, сначала очистить:

make clean

Затем запустите снова и выполните следующие команды один за другим:

./configure
make
make test
make install

. Для получения дополнительной информации о OpenSSL посетите страницу справки Ubuntu на OpenSSL .

4
ответ дан SSchneid 19 August 2018 в 19:20
поделиться

Подчеркивание обычно означает модуль C (т. е. DLL), и Python не может его найти. Вы сами строили питон? Если это так, вам необходимо включить поддержку SSL.

2
ответ дан wisty 19 August 2018 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: