Ответ 1
Вы построили Python из исходного кода? Если это так, вам нужна опция --with-ssl
при создании.
Ubuntu Maverick w/Python 2.7:
Я не могу понять, что делать, чтобы разрешить следующую ошибку импорта:
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/ssl.py", line 60, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: No module named _ssl
UPDATE: Я перекомпилировал источник. Мне не удалось выяснить, как добавить опцию --with-ssl ответы ниже, вместо этого я получил это для работы, отредактировав строки в SSL в/Modules/Setup.dist.
Вы построили Python из исходного кода? Если это так, вам нужна опция --with-ssl
при создании.
Не связанный с исходным вопросом, а потому, что это первый результат Google... Я ударил его по Google AppEngine и должен был добавить:
libraries:
- name: ssl
version: latest
до app.yaml за: https://cloud.google.com/appengine/docs/python/sockets/ssl_support
Пожалуйста, обратите внимание: это, похоже, работает до версии 2.7.9 на Python, но не для 2.7.10 или 2.7.11.
Если вы создали 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 name.
Установка OpenSSL lib в любом из стандартных путей библиотеки (/usr/lib
, /usr/local/lib
...) должна сделать трюк. Во всяком случае, так я и сделал: -)
Поскольку --with-ssl больше не распознается, я просто установил libssl-dev:
sudo apt-get install libssl-dev
Чтобы перезапустить make сначала выполните очистку:
make clean
Затем начните снова и выполните следующие команды одну за другой:
./configure
make
make test
make install
Для получения дополнительной информации об OpenSSL посетите страницу справки Ubuntu на OpenSSL.
У меня была точно такая же проблема. Я исправил его без восстановления python следующим образом:
1) Найти другой сервер с той же архитектурой (i386 или x86_64) и с той же версией python (пример: 2.7.5). Да, это трудная часть. Вы можете попробовать установить python из источников на другой сервер, если вы не можете найти какой-либо сервер с той же версией python.
2) На этом другом сервере проверьте, работает ли импорт ssl. Он должен работать.
3) Если это работает, попробуйте найти _ssl lilbrary следующим образом:
[[email protected]]# find / -iname _ssl.so
/usr/local/python27/lib/python2.7/lib-dynload/_ssl.so
4) Скопируйте этот файл на исходный сервер. Используйте ту же папку назначения: /usr/local/python 27/lib/python2.7/lib-dynload/
5) Двойной проверить владельца и разрешения:
[[email protected]]# chown root:root _ssl.so
[[email protected]]# chmod 755 _ssl.so
6) Теперь вы сможете импортировать ssl.
Это работало для меня в среде CentOS 6.3 x86_64 с python 2.7.3. Также я установил python 2.6.6, но с ssl работал нормально.
Надеюсь, что это поможет.
Подчеркиванием обычно является C-модуль (т.е. DLL), и Python не может его найти. Вы сами строили питон? Если это так, вам необходимо включить поддержку SSL.
Либо установите дополнительные пакеты для python-ssl, используя ваш менеджер пакетов или перекомпилируйте Python, используя -with-ssl (требуется установить заголовки/библиотеки OpenSSL).
В Solaris 11 мне пришлось изменить setup.py, чтобы включить /opt/csw/include/openssl в SSL, включая путь поиска.
Уве
Я нашел какое-то решение:
если вы используете centos, попробуйте:
yum install openssl-devel -y
затем, когда вы компилируете, добавьте --with-ssl, вот так
./configure prefix=/usr/local/share/python3 --with-ssl
- установить зависимую библиотеку, сделать общий доступ
yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++
wget http://www.openssl.org/source/openssl-1.1.1.tar.gz
tar -zxvf openssl-1.1.1.tar.gz
cd openssl-1.1.1
./config --prefix=$HOME/openssl shared zlib
make && make install
- настроить общий путь к библиотеке ld, чтобы компиляция могла его найти
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/openssl/lib" >> $HOME/.bash_profile
source $HOME/.bash_profile
(у пользователя zsh есть некоторые различия с .zsh_profile) - скомпилировать с помощью openssl
./configure prefix=/usr/local/share/python3 --with-openssl=$HOME/openssl