Python: динамический импорт скрипта в другую папку из строки

#python

#python

Вопрос:

Мне нужно импортировать и запустить скрипт из строки (пути), которая находится в другой папке. Ввод должен быть полностью динамическим. Приведенный ниже код работает, когда файл находится в той же папке, но, похоже, я не могу заставить его работать, когда файл находится в другом месте.

main.py

 path = 'binTestScript'

module = __import__(path)

my_class = getattr(module, '__main__')

instance = my_class(3,16)

print(instance)
 

TestScript.py

 def __main__(a,b):

    return(a*b)
 

Получить ошибку:
Ошибка импорта: нет модуля с именем ‘bin \ TestScript’

в ОС Windows

Комментарии:

1. Итак, в чем именно проблема? Вы получаете сообщение об ошибке?

2. Какую ОС вы используете?

3. Получаем ошибку: ImportError: нет модуля с именем ‘bin \ TestScript’

4. binTestScript не является именем модуля . Правильное имя будет примерно таким bin.TestScript . Имена модулей != пути к файлам.

5. На что похож ввод? Не могли бы вы привести пример этого ввода?

Ответ №1:

Вам нужно отделить каталог от имени модуля и добавить его в путь поиска модуля. Например:

 import os.path
import sys

path = 'bin\TestScript'
mdir = os.path.dirname(path)
modname = os.path.basename(path)
sys.path.append(mdir)

module = __import__(modname)

my_class = getattr(module, '__main__')

instance = my_class(3,16)

print(instance)
 

Альтернативой является превращение каталога «bin» в пакет.