【问题标题】:error message when trying to import a package尝试导入包时出现错误消息
【发布时间】:2016-03-14 08:22:30
【问题描述】:

我尝试导入 QGIS 应用程序随附的名为“处理”的包。在 QGIS 中的 Python 控制台中导入该包是没有问题的。我也设法找到了它:

>>>import processing
>>>processing.__file__
'C:/PROGRA~1/QGISES~1/apps/qgis/./python/plugins\\processing\\__init__.py'

但我的目标是将该包导入到一个独立的 Python 脚本中,该脚本在 外部 QGIS 应用程序运行。我找到了一个例子,根据我试过的例子(仅限代码摘要):

sys.path.append('C:\\Program files\\QGIS Essen\\apps\\qgis\\python\\plugins\\processing')
from processing.core.Processing import Processing
Processing.initialize()
import Processing

存在子目录\processing\core,并且该目录中的Processing.py 文件也存在。一切似乎都很好。

print sys.path 给了我(以及其他许多人):

['C:\\Program files\\QGIS Essen\\apps\\qgis\\python\\plugins\\processing']

但是当我运行我的脚本时,我收到一条错误消息告诉我:

ImportError: 没有名为 processing.core.Processing 的模块

为什么找不到那个包或模块?可能是调用语法或路径错误?

【问题讨论】:

  • Python 扫描sys.path 目录中的模块,所以你要添加包的父级...'C:\\Program files\\QGIS Essen\\apps\\qgis\\python\\plugins'

标签: python import package


【解决方案1】:

你的目录太深了。 from processing.core.Processing import Processing 将导致 python 在sys.path 目录中查找名为“处理”的内容,即"'C:\\Program files\\QGIS Essen\\apps\\qgis\\python\\plugins\\processing\\processing"

改为

sys.path.append('C:\\Program files\\QGIS Essen\\apps\\qgis\\python\\plugins')

请注意,这将使plugins 中的所有模块可见。

【讨论】:

  • 很好,它有效。但是现在我收到了新的错误消息:例如 sys.excepthook 中的错误:Traceback(最近一次调用最后一次):文件“C:\Program Files\QGIS Essen\apps\qgis\python\qgis\utils.py”,第 171 行,在 qgis_excepthook 对不起,编辑框告诉我我的评论太长了。不知道如何提供完整的错误信息?现在好像找到了模块或包,但是又出现了新的问题。
  • 一般问:在inside应用程序与outside导入一些东西时我需要考虑哪些差异??
  • 这可能意味着“QGIS Essen”中有更多目录需要添加到sys.path
  • 您可以发布回溯作为您问题的更新。但是您正处于项目的“打地鼠”部分。如果它看起来像一个导入问题,请找到缺少的模块。这个应用程序可能正在使用不同的 python 解释器,甚至是嵌入式解释器,而您想要做的事情是不可能的。但可能只是修补几个洞的问题。
【解决方案2】:

您可以尝试在此处发布此问题:https://gis.stackexchange.com/

是的,您需要所有路径。为了帮助您“敲打痣相”,请尝试从这里开始: http://docs.qgis.org/2.8/en/docs/pyqgis_developer_cookbook/intro.html#run-python-code-when-qgis-starts

他们在 OS 中设置路径 -vs- 在 Python 中设置它们。不过应该是一样的。

FWIW 我尝试通过添加路径并最终寻找出现在“C:\Program Files (x86)\QGIS Essen\apps\qgis\python\qgis__init__.py”第 36 行中的 QgsFeature 和 QgsGeometry 的导入。这些没有在按文件名或内容搜索时弹出,所以我找不到下一个要添加的路径......也许必须安装另一个模块?

我的过程是得到错误,然后在文件名和内容中搜索无法导入的对象。找到文件后,您就拥有了目录和路径。只是继续削减它。

如果有帮助,这是我到目前为止为路径添加的内容:

sys.path.append('C:\\Program Files (x86)\\QGIS Essen\\apps\\qgis\\python\\plugins')
sys.path.append('C:\\Program Files (x86)\\QGIS Essen\\apps\\qgis\\python')
sys.path.append('C:\\Program Files (x86)\\QGIS Essen\\apps\\python27\\lib\\site-packages')
sys.path.append('C:\\Program Files (x86)\\QGIS Essen\\apps\\qgis\\python\\qgis\\core')
sys.path.append('C:\\Program Files (x86)\\QGIS Essen\\apps\\qgis\\python\\qgis\\gui')
sys.path.append('C:\\Program Files (x86)\\QGIS Essen\\apps\\qgis\\bin')

很抱歉,我无法提供更多帮助。

【讨论】:

  • 大家好,信不信由你,今天(重启电脑后),一切正常。也许我做了太多的测试,导致路径构造不仅让我自己也困惑,甚至让 PC 也感到困惑。所以现在抓到了一颗肥痣!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2021-04-14
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
相关资源
最近更新 更多