added pip_runner that add site_packages to sys.path
This commit is contained in:
parent
923b39c7f2
commit
4aa0ca68c8
Binary file not shown.
|
@ -1,6 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" manifest:version="1.2">
|
||||
<manifest:file-entry manifest:full-path="job.xcu" manifest:media-type="application/vnd.sun.star.configuration-data" />
|
||||
<manifest:file-entry manifest:full-path="ZAZPip.py" manifest:media-type="application/vnd.sun.star.uno-component;type=Python"/>
|
||||
<manifest:file-entry manifest:full-path="pip_runner.py" manifest:media-type="application/vnd.sun.star.uno-component;type=Python" />
|
||||
<manifest:file-entry manifest:full-path="Office/Accelerators.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
|
||||
<manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
|
||||
</manifest:manifest>
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
|
||||
<oor:component-data oor:name="Jobs" oor:package="org.openoffice.Office"
|
||||
xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<node oor:name="Jobs">
|
||||
<node oor:name="PipRunnerJob" oor:op="fuse">
|
||||
<prop oor:name="Service">
|
||||
<value>net.elmau.zaz.pip.PipRunner</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
<node oor:name="Events">
|
||||
<node oor:name="OnStartApp" oor:op="fuse">
|
||||
<node oor:name="JobList">
|
||||
<node oor:name="PipRunnerJob" oor:op="fuse" />
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
|
@ -0,0 +1,60 @@
|
|||
# region Imports
|
||||
from __future__ import unicode_literals, annotations
|
||||
import os
|
||||
import sys
|
||||
from typing import TYPE_CHECKING, Tuple
|
||||
from pathlib import Path
|
||||
import uno
|
||||
import unohelper
|
||||
from com.sun.star.task import XJob
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# just for design time
|
||||
from com.sun.star.beans import NamedValue
|
||||
|
||||
# endregion Imports
|
||||
|
||||
# region Constants
|
||||
|
||||
implementation_name = "net.elmau.zaz.pip.PipRunner"
|
||||
implementation_services = ("com.sun.star.task.Job",)
|
||||
|
||||
# endregion Constants
|
||||
|
||||
|
||||
|
||||
# region XJob
|
||||
class PipRunner(unohelper.Base, XJob):
|
||||
def __init__(self, ctx):
|
||||
self._is_flatpak = bool(os.getenv("FLATPAK_ID", ""))
|
||||
if self._is_flatpak:
|
||||
site_packages = self.get_flatpak_site_packages_dir()
|
||||
ss = str(site_packages)
|
||||
if site_packages.exists and ss not in sys.path:
|
||||
sys.path.append(ss)
|
||||
|
||||
def execute(self, *args: Tuple[NamedValue, ...]) -> None:
|
||||
pass
|
||||
|
||||
def get_flatpak_site_packages_dir(self) -> Path:
|
||||
# should never be all users
|
||||
sand_box = os.getenv("FLATPAK_SANDBOX_DIR", "") or str(
|
||||
Path.home() / ".var/app/org.libreoffice.LibreOffice/sandbox"
|
||||
)
|
||||
major_minor = f"{sys.version_info.major}.{sys.version_info.minor}"
|
||||
site_packages = Path(sand_box) / f"lib/python{major_minor}/site-packages"
|
||||
site_packages.mkdir(parents=True, exist_ok=True)
|
||||
return site_packages
|
||||
|
||||
# endregion XJob
|
||||
|
||||
# region Implementation
|
||||
|
||||
g_TypeTable = {}
|
||||
# python loader looks for a static g_ImplementationHelper variable
|
||||
g_ImplementationHelper = unohelper.ImplementationHelper()
|
||||
|
||||
# add the FormatFactory class to the implementation container,
|
||||
# which the loader uses to register/instantiate the component.
|
||||
g_ImplementationHelper.addImplementation(PipRunner, implementation_name, implementation_services)
|
||||
# endregion Implementation
|
Loading…
Reference in New Issue