Импорт фиксированного модуля из динамического пути во время выполнения в python3 - PullRequest
1 голос
/ 19 июня 2019

Я искал и не нашел решения этой конкретной проблемы Python3. Возможно, это ключевые слова, которые я использую, или это может быть просто особый вариант использования. Если моя проблема - последняя, ​​вот мой вопрос:

Я разрабатываю скрипт python (3), в котором должен использоваться модуль python, который был скомпилирован локально в домашнем каталоге пользователя. У меня нет ничего более фантастического, чем скрипт configure для настройки этого пути для пользователя как автоматизированного процесса. Я хочу передать путь к модулю python сценарию во время выполнения в качестве аргумента командной строки, а затем динамически загрузить этот модуль. Например, я позвоню:

$ myscript.py --modpath /home/user/path/to/ModuleSource

и затем в моем коде вызовите что-то вроде следующего при разборе аргументов командной строки:

import sys
sys.path.append(localModulePath)
import GlobalModuleName

Проблема в том, что в статическом коде для моего сценария, который использует методы модуля, фактический модуль не может быть разрешен до времени выполнения, когда определения для модуля передаются в мой сценарий. То есть, если у меня есть код Python, подобный следующему

GlobalModuleName.moduleFunc()

Я получаю ошибки времени выполнения: " NameError: имя 'GlobalModuleName' не определено ".

Как мне заставить эту конфигурацию работать без генерации ошибки? Я уверен, что код, который будет использовать динамические определения модуля, является правильным. Заранее спасибо за указатели.

1 Ответ

0 голосов
/ 19 июня 2019

Это прекрасно сработало для меня

module1.py импорт ОС import sys

def func1():
    print("Executed func1 of module1")

main.py

import sys

pathPassed=sys.argv[1]
sys.path.append(pathPassed)
import module1
module1.func1()

Исполнение

 python main.py ThePathformodule1.py

Executed func1 of module1

Единственное, что вам нужно позаботиться, это то, что оператор import должен быть после sys.path.append

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...