Как получить доступ к блокчейну Golos используя Python и Windows. Шаг 2, исправление багов.
Можно дать человеку рыбу и накормить на один день, а можно научить ловить рыбу и накормить на всю жизнь. =>часть 1
Аналогичная ситуация с "таблетками" и "костылями" при установке чего-либо. В нашем случае при дальнейшей инсталяции piston будут вылазить ошибки. И занятную историю их устранения мы Вам хотим рассказать.
Этап 4. Попытка установить piston.
Чтобы установить piston надо выполнить следующую команду:
pip3.exe install piston-lib
Из директории виртуального окружения. В нашем случае - C:\Piston\Scripts\
Пока все идет хорошо...
И все. После такого захотелось сразу спрятаться, так как чутье говорило - такое просто так не исправишь. Пришлось взять одну ночь перерыва, походить по улице, подышать свежим воздухом.
Оказалось, что для разных версий питона требуются разные версии Visual C++. Так для версий 2.7-3.2 - Visual C++ 2008, для 3.3-3.4 - Visual C++ 2010, для 3.5-3.6 - самая свежая 2017.
Готовое решение Microsoft Visual C++ Compiler for Python 2.7. было и для версии 3.2 (ссылку не указываю). Но когда установил 3.2 версию питона немного удивился... pip там не было, он оказывается появились как раз с версии 3.4. Встали определенные проблемы: а как же тогда установить pip на более древнюю версию, а нужно ли это.
Предлагаемые решения на интернет-форумах для 3.4 версии мне не помогли. Эта ошибка продолжала появляться. А ставить 3.6 можно было только через удаленный доступ на рабочих компьютерах, но и там ничего не пошло и зависло. Да и тогда, даже если бы успешно установилось - я бы лишил себя комфортной работы в ХР.
Как же люблю в таких ситуациях русские народные сказки. Представляешь себя богатырем у камня. Направо пойдешь - коня потеряешь. Так и в сложившейся ситуации. Решения влет не помогли. Нужно тратить время на изучение проблемы для корректной настройки. А для этого нужно определиться где же копать. А где копать-то?
Пригодилось мне изначально поставленные цели-задачи. Доктор сказал в ХР, значит в ХР. Решил не отвлекаться на альтернативные способы и продолжить концентрацию своего внимания на 3.4 версии.
Этап 5. PyCrypto.
В нашем деле главное правильно задать вопрос. И действительно, а зачем при установке piston потребовался С++? Посмотрев логи выше, увидел установку еще одного пакета - RyCrypto. И при попытке его установки отдельно - как раз и появляется сообщение об этой ошибке. Отлично, надо почитать, а что это за Элис и где она живет!
https://www.dlitz.net/software/pycrypto/
И о чудо! При переводе в гуглтранслейт многое прояснилось.
В версиях, предшествующих v2.6.1, Crypto.Random был небезопасным при использовании fork () в некоторых случаях. Дополнительную информацию см. В рекомендациях CVE-2013-1445. Рекомендуется, чтобы пользователи обновлялись до PyCrypto v2.6.1 или новее.
Ага, подумал я. Для доступа к блокчейну требуется шифрование и этот модуль как раз это обеспечивает. В одной из их процедур - Crypto.Random обнаружена уязвимость и она была оперативно исправлена. Установить предыдущую версию не получится, так как безопасность превыше всего и авторы удалили такую возможность. И С++ , видимо, как раз и нужен, чтобы конвертировать их исправление бага в новый файл. (или как-то так).
Теперь можно запустить новый виток поиска и установить Visual C++ 2010.
Этап 6. Visual C++ 2010.
И сколько раз твердили миру не читать советы бывалых. Правильную последовательность действий в танцах с бубнах нашел на wiki )))
https://wiki.python.org/moin/WindowsCompilers
Нужно сделать следующее:
шаг 1. Удалить Microsoft Visual C++ 2010 (иначе будет ошибка при установке)
шаг 2. Установить Microsoft .NET Framework 4. ВНИМАНИЕ! в wiki дана ссылка на клиентсий профиль, а нужно установить полную версию Microsoft .NET Framework 4.
шаг 3. Установить Microsoft Windows SDK for Windows 7 and .NET Framework 4. При этом надо выбрать только три галочки в Windows Native Code Development:
- Check Windows headers and libraries
- Visual C++ Compilers
- Tools
шаг 4. Установить Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1.
шаг 5. Переустановить Microsoft Visual C++ 2010 Redistributable для всего установленного ранее.
Первый танец с бубном закончился, пробуем теперь установить piston-lib.
C:\Piston\Scripts\pip3.exe install piston-lib
Обязательно скрещиваем пальцы на руках и призываем духов айти мира!
Successfully троян меня дери built pycrypto
Это были библиотеки для доступа к блокчейну, надо еще установить собственно саму оболочку piston
C:\Piston\Scripts\pip3.exe install piston-cli
Этап 7. Не все так просто. Visual C++ 2015.
Все, вроде установка прошла. Вот он долгожданный файл для запуска команд.
выполняем нашу первую команду:
piston info
Да елки-палки...
На самом деле даже обрадовался, когда увидел такое сообщение об ошибке. Так как почувствовал, что мой путь близится к завершению. DLL-ки - это внешние файлы необходимые для запуска, скорее всего либо их нет, либо не прописан путь для них. Лечится одним из двух способов, либо кидаем не найденный файл в корень самого piston.exe в нашем случае в папку C:\Piston\Scripts\
Либо кидаем к системным файлам Windows - C:\Windows\System32\
Пришлось запустить поиск этого файла у себя на компьютере. К моему удивлению он был найден в папке Анаконда. Так сложилось, что не все свои эксперименты по настройке описываю и на одном из этапов установил Anaconda3-4.4.0-Windows-x86. Поэтому стал по одному копировать эти файлы в корень нахождения piston. На самом деле, это оказалось плохой идеей. На третьем файле выскочило следующее:
Поиск решения привел меня к одному выводу: идея копировать файлы с анаконды - плохая затея, пришлось удалить эти некорректные для нашей конфигурации файлы.
Далее как-то наткнулся на совет доустановить Visual C++ 2015 Build Tools
И после установки этого обновления в папке System32 появилось все необходимое.
Но libeay32.dll - этот файл таки нужно раздобыть самостоятельно и скопировать в папку, где находится piston
Этап 8. No module named 'winrandom'.
piston info
Ха-ха хи-хи. Я уже сбился который по счету баг приходиться исправлять. Внешние файлы скопированы, а эта ошибка видимо связана снова с PyCrypto, с той самой процедурой random. Как ни странно, решение найдено в одном из незаметных комментариев на одном форуме GitHub.
Problem is solved by editing string in crypto\Random\OSRNG\nt.py:
import winrandom
to
from . import winrandom
Нужно найти файл nt.py и в начале поменять строку
import winrandom
на from .import winrandom
Находим файл
И редактируем его
Сохраняем...
Этап 9. piston info... Enter
Поехали!
у-у-у-у-у-у-и-и-и-и-и-и-и-ё-ё-ё-ё-ё-ё-ё-ё-ё-ё-ё-ё-ххххххххххх-у-у-у-у-у-у-у
Жена проходила мимо в этот момент, остановилась, внимательно посмотрела на меня, изучила реакцию и спросила: "Ты заработал миллион?"
В следующий раз мы расскажем как можно пользоваться piston-cli
и разберем несколько интересных команд...