From 1de67af6784bda271c470c26c449a419cd67e25e Mon Sep 17 00:00:00 2001 From: Devin Neal Date: Thu, 3 Jan 2019 13:42:02 -0800 Subject: [PATCH] allow rendering scenes from any directory (#391) --- manimlib/config.py | 11 +++++++---- manimlib/utils/output_directory_getters.py | 9 +-------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/manimlib/config.py b/manimlib/config.py index 080e86a0..cdae8d8e 100644 --- a/manimlib/config.py +++ b/manimlib/config.py @@ -1,6 +1,6 @@ import argparse import colour -import importlib +import importlib.util import os import sys import types @@ -79,7 +79,7 @@ def parse_cli(): def get_module(file_name): if file_name == "-": - module = types.ModuleType("InputModule") + module = types.ModuleType("input_scenes") code = "from big_ol_pile_of_manim_imports import *\n\n" + sys.stdin.read() try: exec(code, module.__dict__) @@ -88,8 +88,11 @@ def get_module(file_name): print(f"Failed to render scene: {str(e)}") sys.exit(2) else: - module_name = file_name.replace(".py", "").replace(os.sep, ".") - return importlib.import_module(module_name) + module_name = file_name.split(os.sep)[-1].replace(".py", "") + spec = importlib.util.spec_from_file_location(module_name, file_name) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module def get_configuration(args): diff --git a/manimlib/utils/output_directory_getters.py b/manimlib/utils/output_directory_getters.py index 972bc2cd..b1a536c8 100644 --- a/manimlib/utils/output_directory_getters.py +++ b/manimlib/utils/output_directory_getters.py @@ -20,14 +20,7 @@ def guarantee_existance(path): def get_scene_output_directory(scene_class): - try: - file_path = os.path.abspath(inspect.getfile(scene_class)) - file_path = os.path.relpath(file_path, THIS_DIR) - file_path = file_path.replace(".pyc", "") - file_path = file_path.replace(".py", "") - return guarantee_existance(os.path.join(VIDEO_DIR, file_path)) - except TypeError: - return guarantee_existance(os.path.join(VIDEO_DIR, "input_scenes")) + return guarantee_existance(os.path.join(VIDEO_DIR, scene_class.__module__)) def get_movie_output_directory(scene_class, camera_config, frame_duration):