Как импортировать модуль по его имени в виде строки?

Как насчет этого?

function Delete_Directory($Dir) 
{
  if(is_dir($Dir))
  {
      $files = glob( $Dir . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

      foreach( $files as $file )
      {
          Delete_Directory( $file );      
      }
      if(file_exists($Dir))
      {
          rmdir($Dir);
      }
  } 
  elseif(is_file($Dir)) 
  {
     unlink( $Dir );  
  }
}

Refrence: https://paulund.co.uk/php-delete-directory-and-files-in-directory

456
задан Jonathan Rolfsen 13 August 2019 в 11:57
поделиться

5 ответов

С Python, более старым, чем 2.7/3.1, это в значительной степени, как Вы делаете это.

Для более новых версий, см. importlib.import_module для Python 2 и и Python 3 .

, который можно использовать exec, если Вы хотите также.

Или использование __import__ можно импортировать список модулей путем выполнения этого:

>>> moduleNames = ['sys', 'os', 're', 'unittest'] 
>>> moduleNames
['sys', 'os', 're', 'unittest']
>>> modules = map(__import__, moduleNames)

Разорванный прямо от Погружение В Python .

278
ответ дан Bhargav Rao 13 August 2019 в 11:57
поделиться
  • 1
    @Anshuman I' m не уверенный, если я понял Ваш вопрос. Если Вы хотите попросить, чтобы пользователю для выбора почтовой программы действительно понравилось, объяснен в этом сообщении: stackoverflow.com/questions/2077008/… – Derzu 3 September 2012 в 15:01

Можно использовать exec :

exec "import myapp.commands.%s" % command
10
ответ дан Greg Hewgill 13 August 2019 в 11:57
поделиться

Используйте модуль импорта , или более прямое __import__() функция.

19
ответ дан gimel 13 August 2019 в 11:57
поделиться
  • 1
    Имейте перечитанный из ответа. Неважно, если windowFullscreen имеет значение true, ложь или isn' t подарок, Ваше Действие все еще будет полным экраном. – Graeme 8 October 2012 в 08:27

Примечание: импорт удерживается от использования начиная с Python 3.4 в пользу importlib

, Как упомянуто импорт модуль предоставляет Вам загружающий функции:

imp.load_source(name, path)
imp.load_compiled(name, path)

я использовал их прежде для выполнения чего-то подобного.

В моем случае я определил определенный класс с определенными методами, которые требовались. Как только я загрузил модуль, который я проверю, был ли класс в модуле, и затем создайте экземпляр того класса, чего-то вроде этого:

import imp
import os

def load_from_file(filepath):
    class_inst = None
    expected_class = 'MyClass'

    mod_name,file_ext = os.path.splitext(os.path.split(filepath)[-1])

    if file_ext.lower() == '.py':
        py_mod = imp.load_source(mod_name, filepath)

    elif file_ext.lower() == '.pyc':
        py_mod = imp.load_compiled(mod_name, filepath)

    if hasattr(py_mod, expected_class):
        class_inst = getattr(py_mod, expected_class)()

    return class_inst
128
ответ дан Brian Burns 13 August 2019 в 11:57
поделиться
  • 1
    да.. мне установили FB. Я в состоянии совместно использовать любой URL к FB, но не простой текст совместного использования... может u помогать.. – Sudipta Som 28 November 2012 в 08:56

У меня сработало следующее:

import sys, glob
sys.path.append('/home/marc/python/importtest/modus')
fl = glob.glob('modus/*.py')
modulist = []
adapters=[]
for i in range(len(fl)):
    fl[i] = fl[i].split('/')[1]
    fl[i] = fl[i][0:(len(fl[i])-3)]
    modulist.append(getattr(__import__(fl[i]),fl[i]))
    adapters.append(modulist[i]())

Он загружает модули из папки 'modus'. У модулей есть один класс с тем же именем, что и имя модуля. Например. файл modus / modu1.py содержит:

class modu1():
    def __init__(self):
        self.x=1
        print self.x

Результатом является список динамически загружаемых классов «адаптеров».

-7
ответ дан 22 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: