LINUX.ORG.RU

Ошибка импорта модуля ssl

 , , , ,


0

1

Делаю кросс-компиляцию Python3.5.5 на виртуальной машине Ubuntu12. Затем переношу проект на промышленный контроллер. Интерпретатор Python в целом работает. Но есть проблема с модулем ssl. При попытке импорта этого модуля мне выдает сообщение:

>>> import math
>>> import ssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/ssl.py", line 99, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: No module named '_ssl'
>>>

Как исправить эту проблемку?

Делаю кросс-компиляцию Python3.5.5 на виртуальной машине Ubuntu12.

А при конфигурировании SSL-библиотеки точно подцепляются? Смотри выхлоп. Возможно вместе с Python тебе нужно будет кросс-компилировать OpenSSL, делать так, чтобы во время конфигурирования его было видно, потом OpenSSL переносить с Python’ом на твой промышленный контроллер.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

@EXL , мне посоветовали вот эту ссылку - https://stackoverflow.com/questions/5937337/building-python-with-ssl-support-in-non-standard-location . Я выполнил вот этот блок команд:

tar zxf openssl-0.9.8g.tar.gz
cd openssl-0.9.8g
./config
make
sudo make install

Далее делаю кросскомпиляцию Python с учетом того что необходимо откорректировать файл Modules/Setup.dist (рекомендации вышеуказанной ссылки):

204:# Socket module helper for SSL support; you must comment out the other
205:# socket line above, and possibly edit the SSL variable:
206:SSL=/usr/local/ssl
207:_ssl _ssl.c \
208:    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
209:    -L$(SSL)/lib -lssl -lcrypto

то есть расскоментировать строки 206-209 (не помню правда у меня какие номера строк).

Есть правда нюанс: По результатам моей прошлой темы здесь на форуме я «набросал» для себя (может кому и пригодится) как проводить кросс-компиляцию Python - https://github.com/Rashid-S/Cross-compile-Python-in-ARM-Linux-. Так вот расскоментирование вышеуказанных строк я провожу два раза: 1-й раз перед командой ./configure --prefix=$HOME/PythonSrc/PythonHost;

2-й раз перед командой ./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=x86_64-linux-gnu --prefix=$HOME/PythonSrc/PythonTarget --disable-ipv6 --enable-shared.

Может в этом проблема?

Сейчас вот мне командная строка после make выдает:

................................................
    fi
/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld: skipping incompatible /usr/local/ssl/lib/libssl.a when searching for -lssl
/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lssl
/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld: skipping incompatible /usr/local/ssl/lib/libcrypto.a when searching for -lcrypto
/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lcrypto
collect2: выполнение ld завершилось с кодом возврата 1
ln: обращение к «libpython3.5m.so.1.0»: Нет такого файла или каталога
make: *** [libpython3.5m.so] Ошибка 1

Что делать? От чего плясать?

rashid_s ()
Ответ на: комментарий от rashid_s

Сейчас вот мне командная строка после make выдает: Что делать? От чего плясать?

Оно выдаёт вам это, потому что вы пытаетесь подсоединить SSL-библиотеки, скомпилированные под x86 (или x86_64) к библиотекам Python, скомпилированным под ARM-архитектуру.

OpenSSL необходимо кросс-компилировать под ваш промышленный контроллер тоже. Выше написал, как действовать.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 2)
Ответ на: комментарий от xDShot

Человек в виртуалке (x86 или x86_64) с гостевой из древней Ubuntu кросс-компилирует Python и прочий софт под свою промышленную плату. К чему ему виртуалка (это будет уже не виртуалка, а эмулятор) с такой же архитектурой?

По пути наименьшего сопротивления можно было бы скомпилировать Python и OpenSSL прямо на самом промышленном контроллере, но я сильно сомневаюсь, что там полноценный дистрибутив, а не ядро+busybox. Соответственно компилятор туда нормально хрен установишь, да и хватит ли места – тот ещё вопрос.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Создать виртуалку с любым дистром для ARM (или что там в контроллере) (или взять тот же дистр что у контроллера). Скомпилировать там все что надо. Полученные бинарники залить в контроллер. Профит!

xDShot ★★★★★ ()
Ответ на: комментарий от xDShot

Создать виртуалку с любым дистром для ARM (или что там в контроллере) (или взять тот же дистр что у контроллера)

В прошлой теме было выяснено, что нет там никакого общеизвестного дистрибутива, а просто Linux с RT-патчами, примерно как на роутерах: Кросс-компиляция Python3 в Ubuntu 12 для ARM (комментарий)

EXL ★★★★★ ()

Делаю кросс-компиляцию Python3.5.5 на виртуальной машине Ubuntu12. Затем переношу проект на промышленный контроллер.

зачем это делать вручную ? возьмите buildroot, сконфигурируйте под свои нужды - он соберёт всё с зависимостями. Тут архив с готовым конфигом

https://drive.google.com/uc?id=1rgo9nXm-wYZDe9IUlwACM5Vw-6A-j7cr&export=d...

в корне архива:

rootfs.tar - собранная корневая под ваши требования

p3ssl.config - конфиг с которым собрано

Чтобы повторить сборку у себя:

tar xf buildroot-2019.02.2.tar.bz2
cd buildroot-2019.02.2
cp p3ssl.config .config
make oldconfig

если нужно добавить какие-то еще модули кроме ssl:

make menuconfig

Target packages  --->
Interpreter languages and scripting  --->
core python3 modules  ---> 

или

External python modules  ---> 

выйти с сохранением изменений

непосредственно сборка:

make

готовая корневая будет в архиве

buildroot-2019.02.2/output/images/rootfs.tar

он же собранный лежит в корне

из нее надо скопировать на устройство содержимое:

/usr/bin

/usr/lib

не у верен что нужно:

/etc/ssl

anonymous ()
Ответ на: комментарий от EXL

@EXL , вот кстати вопрос по предыдущей теме. В результате я набросал информацию чтоб не забыть как и что делать при кросскомпиляции Python - https://github.com/Rashid-S/Cross-compile-Python-in-ARM-Linux-

Там получается скажем так два «блока» команд в которых проводится в том числе и make . Можете в двух словах сказать что делается при выполнении первого блока команд, а что при выполнении второго?

rashid_s ()
Ответ на: комментарий от rashid_s

Это в секции «кросс-компиляция и сборка»?

Мне лично непонятно, для чего необходим первый блок команд. Так как он собирает и устанавливает Python под ваш хост (Ubuntu). Второй блок выполняет тоже самое, но для контроллера вашего. Возможно это какие-то премудрости для кросс-компиляции Python, я не в курсе этого, нужно смотреть.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

@EXL , я скомпилировал кажись Openssl для ARM. Пользовался инструкцией вот по этой ссылке - https://assil.me/2017/09/30/cross-compile-openssl-arm-zynq.html . Думаю что получилось, потому как команда file openssl выводит сообщение:

openssl: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=0xf6d37a7af0fb5f9cedb9cf8ddaafbf5f60022129, not stripped

Вот что дальше делать? Где и что мне прописать в Configure при кросс-компиляции Python3.5.5 ?

rashid_s ()
Ответ на: комментарий от rashid_s

Где и что мне прописать в Configure при кросс-компиляции Python3.5.5 ?

Выполните ./configure --help и там должно быть написано что и куда подставлять. Кроме openssl нужны ещё и все файлы, вроде заголовочных + библиотеки.

EXL ★★★★★ ()