[РЕШЕНО] Установка python-библиотек Pandas и др. в LO7 Calc (Windows)

Автор economist, 2 июня 2021, 09:31

0 Пользователи и 1 гость просматривают эту тему.

rami

sqlite3 должен быть в базовом комплекте Python, в старой версии LibreOffice 5.0.6.3 он был, а в LibreOffice 7.1.3.2 уже нет.

economist

#16
Этот модуль (sqlite3) и не будет ставиться через pip, потому что модуль давно считается частью Python (но разработчики LO его убрали из LO-python вместе с pip и др. плюшками). Как лечить:

Скачиваем, как в посте #2, нужной разрядности/архитектуры embedded-верисию Python в виде zip-архива (он меньше и в нем ориентироваться проще, чем в обычном, и его даже случайно не "установишь"):

  • для "обычного" и portable LO 6-7 это версия 3.8.10 или точно та что в LO (как ее узнать - см. п. 3 ниже в данном посте)
  • для "обычного" и portable LO 5 это версия 3.5.0 или точно та что в LO
В скачанном zip:

1. Находим файл _sqlite3.pyd и копируем (если нет) в папку \libreoffice\program\python-core-3.8.10\lib\

2. Находим файл sqlite3.dll и копируем (если его нет, хотя и с заменой работает, причем новый файл в 2 раза больше) - в папку \libreoffice\program\

3. Находим внутри файл-архив python38.zip, заходим в него (или распаковываем) и из него копируем всю папку sqlite3 в папку в \libreoffice\program\
В этой папке всего 3 файла:
- dbapi2.pyc
- dump.pyc
- __init__.pyc

4. После этого нужно перезапустить LO и можно проверить работу sqlite3 как модуля. Находясь в папке \libreoffice\program\ в консоли или FarManager/MuCommander/TotalCommander напечатать python и нажать Enter. Запустится интерпретатор Python из состава LO (будет видна его версия, например 3.8.10) и появится приглашение >>>

В нем можно набрать import sqlite3 и после Enter эта команда должна отработать без ошибок, то есть ничего не вывести и показать ниже новое приглашение >>>

Остается убедиться что мы сейчас именно в "урезанном" LO-python, а не в системном. К сожалению, многие торопыги, как и я, пользуются файловыми менеджерами и могут перейти в любую другую папку, а в ней если набрать строку python и запустить - может стартовать не LO-python, а "системный" Python, и внешне это сложно отличить.

Для проверки какой именно вы сейчас python запустили - наберите и выполните две строки (по одной) в приглашении >>>

import sys
sys.executable

Вывод укажет полный путь к запущенному файлу python.exe. Если путь содержит слова LibreOffice - значит это LO-шный python, а не системный. Если слов нет - значит вы поспешили, повторите п. 4. из данного поста.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ost

Сделал. Попробовал импортировать. Получил следующее

D:\Program Files\LO7202\program>python.exe
Python 3.8.10 (default, Jul 28 2021, 22:25:12) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'sqlite3'
>>> import os
>>>

os нашелся, sqlite3 - нет. =(

ost

Имеет ли значение, что на этой машине "нормальный" Python не установлен и LO установлен без административных прав?

rami

Цитата: ost от 12 августа 2021, 10:08
Имеет ли значение, что на этой машине "нормальный" Python не установлен и LO установлен без административных прав?
Нет.


Я попробовал добавить дубликат папки sqlite3 из LibreOffice 5.0.6.3 (python 3.3) в LibreOffice 7.1.3.2 (python 3.8), нормально работает. Наверно по ошибке удалили эту папку.

ost

#20
У меня самая ранняя из установленных версий LO - 7.1.1.2
В каталоге ее установки нашлась папка "program\python-core-3.8.4\Lib\sqlite3". Скопировав ее в каталог установки LO 7.2.0.2 по адресу "program\python-core-3.8.10\lib\", пробую импортировать. Получаю

D:\Program Files\LO7202\program>python.exe
Python 3.8.10 (default, Jul 28 2021, 22:25:12) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "D:\Program Files\LO7202\program\python-core-3.8.10\lib\sqlite3\__init__.py", line 23, in <module>
   from sqlite3.dbapi2 import *
 File "D:\Program Files\LO7202\program\python-core-3.8.10\lib\sqlite3\dbapi2.py", line 27, in <module>
   from _sqlite3 import *
ImportError: DLL load failed while importing _sqlite3: %1 не является приложением Win32.
>>>


Что делаю не так?

UPD
Сейчас попробовал запустить дебагер APSO на встроенном в документ .ods файле следующего содержания
# coding: utf-8
from __future__ import unicode_literals
import uno
import sqlite3

def v01_ListAliases():
    oBook = XSCRIPTCONTEXT.getDocument()
    Sheet = oBook.Sheets.getByIndex(0)
    SheetName = Sheet.Name


Все прошло гладко. Ранее, дебагер не запускался, выдавая окошко с описанием ошибок.
Попробую соорудить БД и повзаимодействовать с ней.

rami

Попробуйте выполнить help("_sqlite3")
что пишет? если нет ошибки, в конце будет адрес файла


P.S. у вас разрядность винды и офиса одинаковая?

ost

#22
Да, разрядность одинаковая.

Выполнил: help("_sqlite3")

Получил:

D:\Program Files\LO7202\program>python.exe
Python 3.8.10 (default, Jul 28 2021, 22:25:12) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> help("_sqlite3")
No Python documentation found for '_sqlite3'.
Use help() to get the interactive help utility.
Use help(str) for help on the str class.


rami, я дополнил свое предыдущее сообщение. Сейчас попробую. Отпишусь.

mikekaganski

#23
Не вполне уверен, насколько релевантно, но похоже, что этот коммит убрал sqlite на macOS для приведения в соответствие с другими платформами:

https://git.libreoffice.org/core/+/8b8c420dc56da6b01aa29cbf433e98b9d36e2dd6

На Windows мы, похоже, исключили sqlite ещё при подготовке перехода на Python3:

https://git.libreoffice.org/core/+/8a6c5b2fcbf2b6d87529e91f58aa41c02d0fc990
С уважением,
Михаил Каганский

ost

Все работает.
По крайней мере, код ниже выполнился корректно.
# coding: utf-8
from __future__ import unicode_literals
import uno
import sqlite3

def ct():
    conn = sqlite3.connect("D:\Python\LO\jt.sl3")
    cursor = conn.cursor()
    cursor.execute(
    """CREATE TABLE TestTable1 (Field01 integer, Field02 text)"""
    )
    cursor.execute(
    """INSERT INTO TestTable1 VALUES (1, 'rec01')"""
    )
    conn.commit()
    cursor.close()
    conn.close()

kompilainenn

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

Цитата: kompilainenn от 12 августа 2021, 14:03
Ну и кому sqlite мешал? =(

Как кому? Чем больше ты тянешь с собой стороннего софта, тем больше твоя головная боль по отслеживанию проблем в нём, что не является твоей прямой задачей. Attack surface, всё такое. С учётом, что нам нужен питон из коробки, но при этом чем меньше головной боли, тем лучше - вполне логичное решение. Другое дело, что у всего есть две стороны :)
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от 12 августа 2021, 14:33нам нужен питон из коробки

Михаил, а есть ли у разработчиков планы использовать, скажем, для Windows "питона из коробки" (причем современного)? Это позволило бы дать ассиметричный ответ Microsoft c его Power технологиями.
Владимир.

mikekaganski

Цитата: sokol92 от 12 августа 2021, 15:18
Михаил, а есть ли у разработчиков планы использовать, скажем, для Windows "питона из коробки" (причем современного)? Это позволило бы дать ассиметричный ответ Microsoft c его Power технологиями.

Не понял вопрос. Что значит "использовать"? Мы его, в общем-то, используем. Уже лет 10 (чуть больше). А до того OOo использовал. И в принципе питон у нас вполне себе современный.

Я, вероятно, просто не понял Вас.
С уважением,
Михаил Каганский

rami

Цитата: mikekaganski от 12 августа 2021, 14:33С учётом, что нам нужен питон из коробки, но при этом чем меньше головной боли, тем лучше - вполне логичное решение.
В офисном питоне удалили огромный и не нужный модуль tkinter, а "черепашку" turtle не удалили, хоря она не работает без tkinter.
>>> help('turtle')
problem in turtle - ModuleNotFoundError: No module named 'tkinter'


А sqlite3 можно было бы оставить на всех осях. Не слышал, чтобы он создавал проблемы.