2009-07-20 3 views
2

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

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

Я не могу изменить сгенерированные файлы, потому что я уже создал их 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") 
+3

Несвязанный совет: никогда не используйте обратную косую черту для имен файлов в коде. Напишите «c: /file.py»; он работает в Windows и намного более согласован для всего, что анализирует пути. –

ответ

5

Использование

m = __import__("File") 

Это, по существу, такой же, как делает

import File 
m = File 
+0

Это действительно то же самое, и поэтому не решает проблему Halfcent, если я правильно прочитаю, что его «файлы, которые я создаю, не хранятся в моих переменных пути, и я бы предпочел сохранить их таким образом». –

+0

Или просто игнорируйте бесполезное ограничение. Файлы могут быть помещены в подпакет, из других модулей в корневом пакете вашего проекта. – habnabit

3

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

import imp 

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

(конечно, учитывая 'с: /thefile.py', вы можете извлечь 'C: /' частей и 'thefile.py' с os.path.spliy, и от 'thefile.py' получить «thefile 'с os.path.splitext.)

Смежные вопросы