Python 导入错误 - 特定案例
Python Import Error - specific case
我知道有很多关于此的问题,但我的问题非常具体,我真的不知道为什么导入不起作用。
我有以下文件夹结构:
importmodule
-classes
-pluginhelper
-- __init__.py
-plugins
-- plugin_a
-- plugin b
-- ..
-__init__.py
-<other py files>
在我的插件文件中,我像这样导入 pluginhelper:
from importmodule.pluginhelper import function1, function2, ...
函数定义在__init__.py
在我的 windows 机器上执行我的插件文件效果很好。当我在服务器上执行此操作时,出现以下异常:
ImportError: No module named 'importmodule'
奇怪的是,我确实从每个插件中得到错误,但只有一个。在其中一个插件中,导入有效,而导入语句没有区别。
我在两台机器上都使用 python 3.5,而在服务器上我的应用程序在 docker 容器中。
编辑:
设置 sys.path 也没有用:
print("Indexed Path for Package.")
sys.path.index(os.getcwd())
我发现了可能的问题:
我的 docker 容器中的文件夹结构似乎不同。我会修复它并告诉你它是否有帮助。 仍然我不明白为什么它与使用相同语句的一个插件一起工作。
我想与您分享我的解决方案,因为阅读该问题的任何人似乎都有类似的问题。
出现此问题是因为包未包含在 pythonpath / syspath 中。我正在使用名为 execute.py 的脚本在新线程中调用插件。这是通过 main.py 中的 cmd 调用的,因为我无法对 类 进行多进程处理。由于插件位于 ../plugins 中,因此 python 仅包含此路径。不是 /importmodule 路径。不知何故,它似乎已包含在 windows 中,我真的不知道那里发生了什么。
我所做的是,我在我的 execute.py 中包含了 sys.path.append
东西,它按如下方式执行插件:from pluginhelper import scrapeHostnames, hostnamesToIps, getSource
。我的 IDE 现在将导入语句标记为红色,但它正在运行,因为我正在附加包。
我知道有很多关于此的问题,但我的问题非常具体,我真的不知道为什么导入不起作用。 我有以下文件夹结构:
importmodule
-classes
-pluginhelper
-- __init__.py
-plugins
-- plugin_a
-- plugin b
-- ..
-__init__.py
-<other py files>
在我的插件文件中,我像这样导入 pluginhelper:
from importmodule.pluginhelper import function1, function2, ...
函数定义在__init__.py
在我的 windows 机器上执行我的插件文件效果很好。当我在服务器上执行此操作时,出现以下异常:
ImportError: No module named 'importmodule'
奇怪的是,我确实从每个插件中得到错误,但只有一个。在其中一个插件中,导入有效,而导入语句没有区别。
我在两台机器上都使用 python 3.5,而在服务器上我的应用程序在 docker 容器中。
编辑: 设置 sys.path 也没有用:
print("Indexed Path for Package.")
sys.path.index(os.getcwd())
我发现了可能的问题: 我的 docker 容器中的文件夹结构似乎不同。我会修复它并告诉你它是否有帮助。 仍然我不明白为什么它与使用相同语句的一个插件一起工作。
我想与您分享我的解决方案,因为阅读该问题的任何人似乎都有类似的问题。
出现此问题是因为包未包含在 pythonpath / syspath 中。我正在使用名为 execute.py 的脚本在新线程中调用插件。这是通过 main.py 中的 cmd 调用的,因为我无法对 类 进行多进程处理。由于插件位于 ../plugins 中,因此 python 仅包含此路径。不是 /importmodule 路径。不知何故,它似乎已包含在 windows 中,我真的不知道那里发生了什么。
我所做的是,我在我的 execute.py 中包含了 sys.path.append
东西,它按如下方式执行插件:from pluginhelper import scrapeHostnames, hostnamesToIps, getSource
。我的 IDE 现在将导入语句标记为红色,但它正在运行,因为我正在附加包。