2012-04-17 6 views
0
from os import listdir 
modo= [name.split(".py")[0] for name in listdir("scripts") if name.endswith(".py")] 
modules = {} 
for modu in modo: 
    modules[modu] = __import__(modu) 
test_samp.function("test") 

Здравствуйте! Если, скажем, «test_samp.py» существует в каталоге скриптов, почему это не позволяет мне запустить test_samp.function («test»)? возвращает:python __import__ все файлы в папке не работают

Unhandled exception in thread started by <function function at 0x8e39204> 
Traceback (most recent call last): 
    File "test_this.py", line 6, in function 
    test_samp.function("test") 
NameError: global name 'test_samp' is not defined 
+0

У вас есть '' __init __ py'' файл.? – Jacxel

+0

Да, но есть ли это, или нет, нет разницы. :/ – abkai

ответ

1

Вы не определяя test_samp вы определяете modules['test_samp']. Плюс, если это в скриптах, вам необходимо импортировать scripts.test_samp

в вашем случае используйте упаковку. Добавьте пустой (или нет) __init__.py (с 2 символами подчеркивания). и используйте import scripts. Получите доступ к вашей функции с помощью scripts.test_samp.function("test"). И вы можете использовать reload(scripts) для перезагрузки всего пакета.

+0

Если скрипты не находятся в вашем пути к python. –

+0

Спасибо, но тогда почему: для modu в modo: __import __ (modu) Также не работает? – abkai

+0

@Lattyware да. но все же лучший способ - использовать пакет с файлом __init__.py – jadkik94

1

Вы можете запустить его с помощью этого:

modules["test_samp"].function("test") 
2

У вас есть две проблемы в вашем коде:

  • __import__ не импортировать в глобальное пространство имен, он возвращает модуль,
  • вы пытаетесь импортировать test_samp, тогда как это scripts.test_samp

То, что вы на самом деле хотите это:

scripts = __import__("scripts", fromlist=modo) 
scripts.test_samp.function("test") 

Над __import__ возвращается scripts пакет со всеми суб-модулей, загруженных. Не забудьте сделать scripts пакет, создав в нем __init__.py.

Смотрите также: Why does Python's __import__ require fromlist?

+0

Благодарим за помощь! Это похоже на то, что она работает, однако __init__.py достигла своего интереса.У меня проблемы с ним, хотя, как указано в комментарии в вышеприведенном сообщении. – abkai

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