Web2py: ImportError: нет модуля с именем patch при попытке импортировать модули в каталог web2py Modules

У меня есть несколько пользовательских модулей, присутствующих в каталоге Modules web2py. Эти модули легко импортируются в файл контроллера. Но когда я пытаюсь импортировать эти модули в файл scheduler.py, я получаю сообщение об ошибке. Пожалуйста, помогите.

/home/www-data/web2py$ python web2py.py -K <app_name>
web2py Web Framework
Created by Massimo Di Pierro, Copyright 2007-2018
Version 2.15.4-stable+timestamp.2017.09.02.04.02.22
Database drivers available: sqlite3, imaplib, pymysql, pg8000
starting scheduler for "<app_name>"...
Currently running 1 scheduler processes
Traceback (most recent call last):
  File "/home/www-data/web2py/gluon/restricted.py", line 219, in restricted
    exec(ccode, environment)
  File "applications/<app_name>/models/scheduler.py", line 28, in <module>
    customSSH = local_import('customSSH')
  File "/home/www-data/web2py/gluon/compileapp.py", line 444, in <lambda>
    local_import_aux(name, reload, app)
  File "/home/www-data/web2py/gluon/compileapp.py", line 347, in local_import_aux
    module = __import__(name)
  File "/home/www-data/web2py/gluon/custom_import.py", line 111, in custom_importer
    return NATIVE_IMPORTER(name, globals, locals, fromlist, level)
  File "applications/<app_name>/modules/customSSH.py", line 4, in <module>
    import multiprocessing
  File "/home/www-data/web2py/gluon/custom_import.py", line 111, in custom_importer
    return NATIVE_IMPORTER(name, globals, locals, fromlist, level)
  File "applications/<app_name>/modules/multiprocessing/__init__.py", line 64, in <module>
    import multiprocessing.patch
  File "/home/www-data/web2py/gluon/custom_import.py", line 111, in custom_importer
    return NATIVE_IMPORTER(name, globals, locals, fromlist, level)
ImportError: No module named patch

1 ответ

Решение

Проблема в том, что multiprocessing также имя модуля в стандартной библиотеке Python. Первоначальный импорт multiprocessing находится в /modules пользовательского импортера web2py. Однако когда multiprocessing сам пытается импортировать multiprocessing.patch, родной импортер Python ожидает .patch быть подмодулем стандартной библиотеки multiprocessingчто, конечно, не удается.

Если multiprocessing является сторонней библиотекой, вероятно, было бы лучше установить ее вне папки /modules приложения. Если это пользовательский модуль или модуль, который вы можете редактировать, вы можете либо переименовать модуль, либо изменить импорт, чтобы обратиться к полному applications.<app_name>.modules путь - например:

import applications.<app_name>.modules.multiprocessing.patch as patch
Другие вопросы по тегам