Page 1 of 3

Lunatic Python

Posted: Tue 19 Jan, 2016 11:59
by Shmuel
Данный модуль позволяет вызывать питон из луа и луа из питона. С точки зрения Far это даёт возможность пользоваться из макросов многочисленными библиотеками питона.

Пример установки (пути в примере указаны для Python 3.7 x86 - скорректируйте соответственно если у вас Python 3.4/3.6 и/или x64):
  • Установить Python.
  • Скопировать src\out\python37\32bit\python.dll в %FARPROFILE%\Macros\lib32
  • Скопировать демо-макрос src\examples\py-hash.lua в %FARPROFILE%\Macros\scripts. В макрофайле есть таблица Config, где можно указать используемые вами битности.
Оригинальная библиотека и документация - здесь.
Используемый форк этой библиотеки - здесь.
lunatic-python-20190118.7z
(445.64 KiB) Downloaded 273 times

Lunatic Python

Posted: Fri 22 Jan, 2016 20:59
by Shmuel
Попробовал собрать майкрософтовскими средствами - всё заработало: и на x86, и на x64.
Обновлённая версия - в шапке.

Lunatic Python

Posted: Tue 26 Jan, 2016 15:35
by Shmuel
Доработал демо-макрос по подобию плагина "Hash calculator". Теперь этот макрос более полезен и эстетичен.

Вообще удивляет отсутствие интереса к данной библиотеке.

Lunatic Python

Posted: Tue 26 Jan, 2016 19:37
by Smitis
Shmuel wrote:Вообще удивляет отсутствие интереса к данной библиотеке.
С моей точки зрения, Питон весьма неудобный язык (как и moonscript) для написания программ. На компьютере как скриптовый язык он мне не нужен.
Но, как дополнительная библиотека для lua может сгодиться, для Питона много чего понаписали. Но у меня "мобильная" версия ФАРа, синхронизируемая на нескольких компьютерах, пихать в неё ещё кучу файлов не хочется, итак объёмы растут. Тут бы разобраться, что действительно для работы Питона нужно. Экперимент показывает, что для данного примера достаточно python34.dll и несколько модулей из Lib (как я понял, реально используемые модули Питон предварительно компилирует в файлы *.pyc и помещает в папки __pycache__).
К сожалению, когда Питону чего-либо не хватает, ФАР при вызове макроса улетает в неизвестном направлении не попрощавшись. Вот бы какую-нибудь диагностику в виде сообщений типа "Не могу загрузить модуль zzzz" без падения ФАРа, это реализуемо?

Lunatic Python

Posted: Tue 26 Jan, 2016 20:15
by Shmuel
Smitis wrote: С моей точки зрения, Питон весьма неудобный язык (как и moonscript) для написания программ.
С этим не соглашусь, но ... о вкусах не спорят.
Smitis wrote: К сожалению, когда Питону чего-либо не хватает, ФАР при вызове макроса улетает в неизвестном направлении не попрощавшись. Вот бы какую-нибудь диагностику в виде сообщений типа "Не могу загрузить модуль zzzz" без падения ФАРа, это реализуемо?
Думаю, что всё реализуемо при условии вложения в проект нужного количества человеко-часов. Другой вопрос, произойдёт ли это.

Lunatic Python

Posted: Sat 30 Jan, 2016 18:20
by Shmuel
Демо-макрос: добавим прогресс-бар и возможность прерывать процесс нажатием Esc.

Lunatic Python

Posted: Mon 01 Feb, 2016 14:06
by Smitis
При запуска макроса с прогресс-баром, сначала показывается прогресс-бар, до конца не доходит и питон вылетает с выводом в консоль

Code: Select all

Traceback (most recent call last):
File "<string>", line 21, in CalcHash
TypeError: 'float' object cannot be interpreted as an integer
Предыдущий макрос работает нормально.

Win7 x64, FAR 4527 (и предыдущие) x86, Python 3.4.4 x86

Lunatic Python

Posted: Mon 01 Feb, 2016 14:18
by Shmuel
Да, было такое, но уже исправлено.

Что плохо - то, что макрос (если он уже запускался) не выдерживает перезагрузки макросов - запуск после перезагрузки приводит к вылету. Надеюсь разобраться с этим, но когда - не знаю.

Lunatic Python

Posted: Thu 10 Aug, 2017 11:44
by tstr
пару замечаний касательно портабельности:
1. для загрузки Lunatic Python расширения достаточно добавить python34.dll и python34.zip в %FARHOME%
2. если не хотим захламлять %FARHOME%, то можно добавить в %FARPROFILE%\Macros\modules\python\init.lua что-то типа временной уставновки переменной PATH и загрузки модуля из dll:
- в данном случае добавляются временно %FARPROFILE%\Macros\clib.AMD64, %FARPROFILE%\Macros\lib.AMD64 или %FARPROFILE%\Macros\clib.IA32, %FARPROFILE%\Macros\lib.IA32 в зависимости от битности ФАР. в первой живёт Lunatic Python (python.dll), во второй - python34.dll и python34.zip

Lunatic Python

Posted: Thu 10 Aug, 2017 16:23
by Shmuel
tstr, дней 10 назад изменилось значение по умолчанию package.cpath. Поэтому 32-битный python.dll можно класть в %FARPROFILE%\Macros\lib32, а 64-битный - в %FARPROFILE%\Macros\lib64. Первый пост темы отредактирован с учётом этого изменения.

Lunatic Python

Posted: Thu 10 Aug, 2017 17:38
by tstr
Shmuel, я для себя ранее отметил указанные Вами изменения, но на подготовку локальной конфигурации как это нужно мне как пользователю (которая делалась ранее в _macroinit.lua , а затем перекочевала в luafar_init.lua, что исправило загрузку библиотек, используемых lfsearch и упростило схему) — кроме насильственного создания двух пустых папок, не повлияло. для пользователя - терпимо; для программиста, для определённости - хорошо. я указывал на ньюанс возможности перехвата загрузки модуля для подготовки окружения…

я понимаю насч. изначальной идеи совместимости с ХР а следовательно переносимости, но в свете pygin и возможностью настроек его загрузки с помощью python36._pth и pyvenv.cfg - может подправить Lunatic Python на использование “обёрточной” python3.dll ?

Lunatic Python

Posted: Thu 10 Aug, 2017 17:53
by Shmuel
tstr wrote: Thu 10 Aug, 2017 17:38может подправить Lunatic Python на использование “обёрточной” python3.dll ?
А эта обёрточная где-то есть готовая? Не хотелось бы ещё один проект заводить.
Поскольку сам я с XP уже съехал (заставили на работе, а так мне было с ней очень хорошо), то лично я уже не озабочен совместимостью с XP. Может быть просто пересобрать библиотеку с Python 3.6 ?

Lunatic Python

Posted: Thu 10 Aug, 2017 18:36
by tstr
интерфейс python3.dll - "стабильное" (stable ABI) подмножество интерфейса python36.dll , его хватает в большинстве кейсов использования подобного нашим. прелесть в том, что теоретически должно работать без пересборки на всей современной 3-й ветке.

Lunatic Python

Posted: Thu 10 Aug, 2017 20:56
by DrKnS
tstr wrote: Thu 10 Aug, 2017 17:38в свете pygin и возможностью настроек его загрузки с помощью python36._pth и pyvenv.cfg
А можно узнать подробности? И спасибо за информацию о python3.dll.

Lunatic Python

Posted: Thu 10 Aug, 2017 21:37
by Shmuel
tstr wrote: Thu 10 Aug, 2017 18:36"стабильное" (stable ABI) подмножество интерфейса python36.dll , его хватает в большинстве кейсов использования подобного нашим
Но не хватает для библиотеки Lunatic Python (в том виде как она есть у нас сейчас). Например, используемая библиотекой функция PyUnicode_AsUTF8AndSize становится недоступной. (Всё это можно, наверное, решить, но я не уверен, что буду это делать).