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

Среди нескольких других параметров номер страницы и общий номер страницы передаются в HTML-код нижнего колонтитула как параметры запроса, как указано в официальных документах:

... [номер страницы ] аргументы отправляются в html-документы заголовка / нижнего колонтитула в модуле GET.

blockquote>

Источник: http://wkhtmltopdf.org/usage/wkhtmltopdf.txt

Таким образом, решение состоит в том, чтобы получить эти параметры, используя бит JS и превращая их в шаблон HTML. Вот полный рабочий пример HTML нижнего колонтитула:




    
    


    

Page of

substitutePdfVariables() вызывается в теле onload. Затем мы получаем каждую поддерживаемую переменную из строки запроса и заменяем содержимое во всех элементах соответствующим именем класса.

956
задан rypel 16 February 2014 в 15:36
поделиться

8 ответов

Для Python 3.5 + использование:

import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()

Для использования Python 3.3 и 3.4:

from importlib.machinery import SourceFileLoader

foo = SourceFileLoader("module.name", "/path/to/file.py").load_module()
foo.MyClass()

(Хотя это было удержано от использования в Python 3.4.)

Для использования Python 2:

import imp

foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()

существуют эквивалентные функции удобства для скомпилированных файлов Python и DLLs.

См. также http://bugs.python.org/issue21436 .

1103
ответ дан Sebastian Rittau 16 February 2014 в 15:36
поделиться

модули пакета Импорта во времени выполнения (рецепт Python)

http://code.activestate.com/recipes/223972/

###################
##                #
## classloader.py #
##                #
###################

import sys, types

def _get_mod(modulePath):
    try:
        aMod = sys.modules[modulePath]
        if not isinstance(aMod, types.ModuleType):
            raise KeyError
    except KeyError:
        # The last [''] is very important!
        aMod = __import__(modulePath, globals(), locals(), [''])
        sys.modules[modulePath] = aMod
    return aMod

def _get_func(fullFuncName):
    """Retrieve a function object from a full dotted-package name."""

    # Parse out the path, module, and function
    lastDot = fullFuncName.rfind(u".")
    funcName = fullFuncName[lastDot + 1:]
    modPath = fullFuncName[:lastDot]

    aMod = _get_mod(modPath)
    aFunc = getattr(aMod, funcName)

    # Assert that the function is a *callable* attribute.
    assert callable(aFunc), u"%s is not callable." % fullFuncName

    # Return a reference to the function itself,
    # not the results of the function.
    return aFunc

def _get_class(fullClassName, parentClass=None):
    """Load a module and retrieve a class (NOT an instance).

    If the parentClass is supplied, className must be of parentClass
    or a subclass of parentClass (or None is returned).
    """
    aClass = _get_func(fullClassName)

    # Assert that the class is a subclass of parentClass.
    if parentClass is not None:
        if not issubclass(aClass, parentClass):
            raise TypeError(u"%s is not a subclass of %s" %
                            (fullClassName, parentClass))

    # Return a reference to the class itself, not an instantiated object.
    return aClass


######################
##       Usage      ##
######################

class StorageManager: pass
class StorageManagerMySQL(StorageManager): pass

def storage_object(aFullClassName, allOptions={}):
    aStoreClass = _get_class(aFullClassName, StorageManager)
    return aStoreClass(allOptions)
2
ответ дан Eric Leschinski 16 February 2014 в 15:36
поделиться

Я полагаю, что можно использовать imp.find_module() и imp.load_module() для загрузки указанного модуля. Необходимо будет отколоть имя модуля пути, т.е. если бы Вы хотели загрузиться /home/mypath/mymodule.py, то необходимо было бы сделать:

imp.find_module('mymodule', '/home/mypath/')

..., но это должно сделать задание.

8
ответ дан Mathieu Rodic 16 February 2014 в 15:36
поделиться
def import_file(full_path_to_module):
    try:
        import os
        module_dir, module_file = os.path.split(full_path_to_module)
        module_name, module_ext = os.path.splitext(module_file)
        save_cwd = os.getcwd()
        os.chdir(module_dir)
        module_obj = __import__(module_name)
        module_obj.__file__ = full_path_to_module
        globals()[module_name] = module_obj
        os.chdir(save_cwd)
    except:
        raise ImportError

import_file('/home/somebody/somemodule.py')
10
ответ дан Chris Calloway 16 February 2014 в 15:36
поделиться

Вы имеете в виду загрузку или импорт?

можно управлять списком sys.path, определяют путь к модулю, затем импортируют модуль. Например, учитывая модуль в:

/foo/bar.py

Вы могли сделать:

import sys
sys.path[0:0] = ['/foo'] # puts the /foo directory at the start of your path
import bar
12
ответ дан Jason Orendorff 16 February 2014 в 15:36
поделиться

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

load_source(module_name, path_to_file) 

метод от модуль импорта .

16
ответ дан twasbrillig 16 February 2014 в 15:36
поделиться

Можно также сделать что-то вроде этого и добавить каталог, что конфигурационный файл находится в к пути загрузки Python, и затем просто сделайте нормальный импорт, предположив знание названия файла заранее, в этом случае "конфигурация".

Грязный, но это работает.

configfile = '~/config.py'

import os
import sys

sys.path.append(os.path.dirname(os.path.expanduser(configfile)))

import config
19
ответ дан Peter Mortensen 16 February 2014 в 15:36
поделиться

Преимущество добавления пути к sys.path (по использованию импорта) состоит в том, что это упрощает вещи при импорте больше чем одного модуля из единственного пакета. Например:

import sys
# the mock-0.3.1 dir contains testcase.py, testutils.py & mock.py
sys.path.append('/foo/bar/mock-0.3.1')

from testcase import TestCase
from testutils import RunTests
from mock import Mock, sentinel, patch
369
ответ дан Daryl Spitzer 16 February 2014 в 15:36
поделиться
Другие вопросы по тегам:

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