From 97e31ec51dd44fd00232cb66eaa3c60d3e0701e6 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Fri, 8 Mar 2024 09:36:36 -0800 Subject: [PATCH] server: use target rather than prefix --- server/package-lock.json | 4 +- server/python/plugin_pip.py | 3 +- server/python/plugin_remote.py | 43 +++++++--------------- server/src/plugin/runtime/python-worker.ts | 2 + 4 files changed, 19 insertions(+), 33 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index d613283b0..3d3244a5f 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/server", - "version": "0.94.9", + "version": "0.94.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@scrypted/server", - "version": "0.94.9", + "version": "0.94.10", "license": "ISC", "dependencies": { "@bjia56/portable-python-3.9": "^0.1.9", diff --git a/server/python/plugin_pip.py b/server/python/plugin_pip.py index befc3fed1..babac30b0 100644 --- a/server/python/plugin_pip.py +++ b/server/python/plugin_pip.py @@ -47,7 +47,6 @@ def install_with_pip( requirements_basename: str, ignore_error: bool = False, site_packages: str = None, - target: bool = False, ): requirementstxt, installed_requirementstxt = get_requirements_files(requirements_basename) @@ -72,7 +71,7 @@ def install_with_pip( "install", "-r", requirementstxt, - "--prefix" if not target else "--target", + "--target", python_prefix, ] if pythonVersion: diff --git a/server/python/plugin_remote.py b/server/python/plugin_remote.py index 9a4c1a961..f4b375d76 100644 --- a/server/python/plugin_remote.py +++ b/server/python/plugin_remote.py @@ -563,16 +563,15 @@ class PluginRemote: python_versioned_directory = '%s-%s-%s' % ( python_version, platform.system(), platform.machine()) SCRYPTED_BASE_VERSION = os.environ.get('SCRYPTED_BASE_VERSION') - if SCRYPTED_BASE_VERSION: - python_versioned_directory += '-' + SCRYPTED_BASE_VERSION + python_versioned_directory += '-' + SCRYPTED_BASE_VERSION - python_prefix = os.path.join( + pip_target = os.path.join( plugin_volume, python_versioned_directory) - print('python prefix: %s' % python_prefix) + print('pip target: %s' % pip_target) - if not os.path.exists(python_prefix): - os.makedirs(python_prefix) + if not os.path.exists(pip_target): + os.makedirs(pip_target) def read_requirements(filename: str) -> str: @@ -584,12 +583,12 @@ class PluginRemote: str_optional_requirements = read_requirements('requirements.optional.txt') scrypted_requirements_basename = os.path.join( - python_prefix, 'requirements.scrypted') + pip_target, 'requirements.scrypted') requirements_basename = os.path.join( - python_prefix, 'requirements') - debug_requirements_basename = os.path.join(python_prefix, 'requirements.debug') + pip_target, 'requirements') + debug_requirements_basename = os.path.join(pip_target, 'requirements.debug') optional_requirements_basename = os.path.join( - python_prefix, 'requirements.optional') + pip_target, 'requirements.optional') need_pip = True if str_requirements: @@ -602,31 +601,17 @@ class PluginRemote: if need_pip: remove_pip_dirs(plugin_volume) - install_with_pip(python_prefix, packageJson, SCRYPTED_REQUIREMENTS, scrypted_requirements_basename, ignore_error=True) - install_with_pip(python_prefix, packageJson, str_requirements, requirements_basename, ignore_error=False) - install_with_pip(python_prefix, packageJson, str_optional_requirements, optional_requirements_basename, ignore_error=True) + install_with_pip(pip_target, packageJson, SCRYPTED_REQUIREMENTS, scrypted_requirements_basename, ignore_error=True) + install_with_pip(pip_target, packageJson, str_requirements, requirements_basename, ignore_error=False) + install_with_pip(pip_target, packageJson, str_optional_requirements, optional_requirements_basename, ignore_error=True) if python_debugpy_target: - install_with_pip(python_debugpy_target, packageJson, SCRYPTED_DEBUGPY_REQUIREMENTS, debug_requirements_basename, ignore_error=True, target=True) + install_with_pip(python_debugpy_target, packageJson, SCRYPTED_DEBUGPY_REQUIREMENTS, debug_requirements_basename, ignore_error=True) else: print('requirements.txt (up to date)') print(str_requirements) sys.path.insert(0, zipPath) - if platform.system() != 'Windows': - # local/lib/dist-packages seen on python3.10 on ubuntu. - # TODO: find a way to programatically get this value, or switch to venv. - dist_packages = os.path.join( - python_prefix, 'local', 'lib', python_version, 'dist-packages') - if os.path.exists(dist_packages): - site_packages = dist_packages - else: - site_packages = os.path.join( - python_prefix, 'lib', python_version, 'site-packages') - else: - site_packages = os.path.join( - python_prefix, 'Lib', 'site-packages') - print('site-packages: %s' % site_packages) - sys.path.insert(0, site_packages) + sys.path.insert(0, pip_target) else: zip = zipfile.ZipFile(options['filename']) diff --git a/server/src/plugin/runtime/python-worker.ts b/server/src/plugin/runtime/python-worker.ts index ab6209c7b..1b69bead0 100644 --- a/server/src/plugin/runtime/python-worker.ts +++ b/server/src/plugin/runtime/python-worker.ts @@ -90,6 +90,8 @@ export class PythonRuntimeWorker extends ChildProcessWorker { // stdin, stdout, stderr, peer in, peer out stdio: ['pipe', 'pipe', 'pipe', 'pipe', 'pipe'], env: Object.assign({ + // rev this if the base python version or server characterstics change. + SCRYPTED_BASE_VERSION: '20240308', PYTHONUNBUFFERED: '1', PYTHONPATH, SCRYPTED_DEBUGPY_TARGET,