Импорт динамически создаваемых файлов Python - PullRequest
2 голосов
/ 21 июля 2009

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

Первоначально я вызывал функцию execFile(<script_path>), а затем вызывал функцию, определенную выполнением файла. Это побочный эффект - всегда входить в условие if __name__ == "__main__", чего при моей текущей настройке не может быть.

Я не могу изменить сгенерированные файлы, потому что я уже создал 100 из них и не хочу пересматривать их все. Я могу только изменить файл, который вызывает сгенерированные файлы.

В основном то, что у меня сейчас ...

#<c:\File.py>
def func(word):
   print word

if __name__ == "__main__":
   print "must only be called from command line"
   #results in an error when called from CallingFunction.py
   input = sys.argv[1]

#<CallingFunction.py>
#results in Main Condition being called
execFile("c:\\File.py")
func("hello world")

Ответы [ 2 ]

5 голосов
/ 21 июля 2009

Используйте

m = __import__("File")

Это по сути то же самое, что и

import File
m = File
3 голосов
/ 21 июля 2009

Если я правильно понимаю ваши замечания человеку о том, что файла нет в sys.path, и вы бы предпочли оставить его таким, это все равно будет работать:

import imp

fileobj, pathname, description = imp.find_module('thefile', 'c:/')
moduleobj = imp.load_module('thefile', fileobj, pathname, description)
fileobj.close()

(Конечно, учитывая 'c: /thefile.py', вы можете извлечь части 'c: /' и 'thefile.py' с помощью os.path.spliy, а из 'thefile.py' получить os.path.splitext.)

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