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