feat: add more format support

This commit is contained in:
2024-05-11 10:43:00 +08:00
parent eeca79e681
commit 1990a16972
18 changed files with 671 additions and 238 deletions

View File

@@ -1 +1,2 @@
from .preferences import ExternalPackagePreferences
from .preferences import ExternalPackagePreferences
from .package import PackageInstaller

View File

@@ -42,12 +42,13 @@ class InstallationError(Exception):
class PackageInstaller():
def __init__(
self,
log_dir: str,
requirements_dir: str,
log_dir: str = None,
pypi_mirror_provider='Default',
) -> None:
self.pypi_mirror_provider = pypi_mirror_provider
self.log_path: Path = Path(log_dir)
self.log_path: Path = Path(log_dir) if log_dir \
else Path.home() / '.externalpackage' / 'logs'
self.requirements_path: Path = Path(requirements_dir)
def start_logging(self, logfile_name: str = 'side-packages-install') -> logging.Logger:
@@ -250,7 +251,7 @@ class PackageInstaller():
if result.returncode != 0:
log.error('Command failed: %s', cmd_list)
log.error('stdout: %s', result.stdout.decode())
log.error('stderr: %s', result.stderr.decode())
log.error('stderr: %s', result.stderr.decode(errors='ignore'))
else:
log.info('Command succeeded: %s', cmd_list)
log.info('stdout: %s', result.stdout.decode())
@@ -350,6 +351,7 @@ class EXTERNALPACKAGE_OT_Install_Package(bpy.types.Operator):
name='Python Package',
description='Python Package to Install'
) # type: ignore
version: bpy.props.StringProperty(
name='Python Package',
description='Python Package to Install'

View File

@@ -1,4 +1,5 @@
import bpy
import subprocess
from pathlib import Path
from .package import PackageInstaller, PYPI_MIRROR
@@ -10,6 +11,25 @@ def get_pypi_mirrors(self, context, edit_text):
return PYPI_MIRROR.keys()
class RebootBlender(bpy.types.Operator):
bl_idname = "externalpackage.reboot_blender"
bl_label = "Reboot Blender"
bl_description = "Reboot Blender"
bl_options = {'UNDO'}
def invoke(self, context, event):
context.window_manager.invoke_confirm(self, event)
return {'RUNNING_MODAL'}
def execute(self, context):
blender_launcher = Path(
bpy.app.binary_path).parent / "blender-launcher.exe"
subprocess.run([str(blender_launcher), "-con", "--python-expr",
"import bpy; bpy.ops.wm.recover_last_session()"])
bpy.ops.wm.quit_blender()
return {'FINISHED'}
class ExternalPackagePreferences():
requirements_dir: bpy.props.StringProperty(
name="requirements.txt Directory",
@@ -34,11 +54,12 @@ class ExternalPackagePreferences():
def draw(self, context):
layout = self.layout
layout.label(text="Install the required packages.")
layout.label(
text='**Install the required packages, then hit "Reboot Blender"**')
col_main = layout.column(heading='', align=False)
row_import = col_main.row()
row_import.prop(self, 'pypi_mirror_provider', text='Set PyPI Mirror')
row_import.prop(self, 'pypi_mirror_provider', text='PyPI Mirror')
installer = PackageInstaller(
pypi_mirror_provider=self.pypi_mirror_provider,
@@ -70,3 +91,5 @@ class ExternalPackagePreferences():
op.package = name
op.version = version
op.description = f'Install required python package: {name}'
layout.operator(RebootBlender.bl_idname)