Lunatic Python

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post 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 271 times
Last edited by Shmuel on Fri 18 Jan, 2019 16:11, edited 5 times in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

Попробовал собрать майкрософтовскими средствами - всё заработало: и на x86, и на x64.
Обновлённая версия - в шапке.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

Доработал демо-макрос по подобию плагина "Hash calculator". Теперь этот макрос более полезен и эстетичен.

Вообще удивляет отсутствие интереса к данной библиотеке.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Lunatic Python

Post by Smitis »

Shmuel wrote:Вообще удивляет отсутствие интереса к данной библиотеке.
С моей точки зрения, Питон весьма неудобный язык (как и moonscript) для написания программ. На компьютере как скриптовый язык он мне не нужен.
Но, как дополнительная библиотека для lua может сгодиться, для Питона много чего понаписали. Но у меня "мобильная" версия ФАРа, синхронизируемая на нескольких компьютерах, пихать в неё ещё кучу файлов не хочется, итак объёмы растут. Тут бы разобраться, что действительно для работы Питона нужно. Экперимент показывает, что для данного примера достаточно python34.dll и несколько модулей из Lib (как я понял, реально используемые модули Питон предварительно компилирует в файлы *.pyc и помещает в папки __pycache__).
К сожалению, когда Питону чего-либо не хватает, ФАР при вызове макроса улетает в неизвестном направлении не попрощавшись. Вот бы какую-нибудь диагностику в виде сообщений типа "Не могу загрузить модуль zzzz" без падения ФАРа, это реализуемо?
Разум когда-нибудь победит.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

Smitis wrote: С моей точки зрения, Питон весьма неудобный язык (как и moonscript) для написания программ.
С этим не соглашусь, но ... о вкусах не спорят.
Smitis wrote: К сожалению, когда Питону чего-либо не хватает, ФАР при вызове макроса улетает в неизвестном направлении не попрощавшись. Вот бы какую-нибудь диагностику в виде сообщений типа "Не могу загрузить модуль zzzz" без падения ФАРа, это реализуемо?
Думаю, что всё реализуемо при условии вложения в проект нужного количества человеко-часов. Другой вопрос, произойдёт ли это.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

Демо-макрос: добавим прогресс-бар и возможность прерывать процесс нажатием Esc.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Lunatic Python

Post 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
Разум когда-нибудь победит.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

Да, было такое, но уже исправлено.

Что плохо - то, что макрос (если он уже запускался) не выдерживает перезагрузки макросов - запуск после перезагрузки приводит к вылету. Надеюсь разобраться с этим, но когда - не знаю.
tstr
Posts: 557
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 20 times
Been thanked: 9 times

Lunatic Python

Post 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
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

tstr, дней 10 назад изменилось значение по умолчанию package.cpath. Поэтому 32-битный python.dll можно класть в %FARPROFILE%\Macros\lib32, а 64-битный - в %FARPROFILE%\Macros\lib64. Первый пост темы отредактирован с учётом этого изменения.
tstr
Posts: 557
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 20 times
Been thanked: 9 times

Lunatic Python

Post by tstr »

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

я понимаю насч. изначальной идеи совместимости с ХР а следовательно переносимости, но в свете pygin и возможностью настроек его загрузки с помощью python36._pth и pyvenv.cfg - может подправить Lunatic Python на использование “обёрточной” python3.dll ?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

tstr wrote: Thu 10 Aug, 2017 17:38может подправить Lunatic Python на использование “обёрточной” python3.dll ?
А эта обёрточная где-то есть готовая? Не хотелось бы ещё один проект заводить.
Поскольку сам я с XP уже съехал (заставили на работе, а так мне было с ней очень хорошо), то лично я уже не озабочен совместимостью с XP. Может быть просто пересобрать библиотеку с Python 3.6 ?
tstr
Posts: 557
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 20 times
Been thanked: 9 times

Lunatic Python

Post by tstr »

интерфейс python3.dll - "стабильное" (stable ABI) подмножество интерфейса python36.dll , его хватает в большинстве кейсов использования подобного нашим. прелесть в том, что теоретически должно работать без пересборки на всей современной 3-й ветке.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Lunatic Python

Post by DrKnS »

tstr wrote: Thu 10 Aug, 2017 17:38в свете pygin и возможностью настроек его загрузки с помощью python36._pth и pyvenv.cfg
А можно узнать подробности? И спасибо за информацию о python3.dll.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lunatic Python

Post by Shmuel »

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

Return to “Обсуждение макросов”