VMTK 自定义脚本产生 "No module named: vmtk.custom" 错误

VMTK custom script producing "No module named: vmtk.custom" error

我正在使用一个名为 VMTK 的模块来构建用于分析血管模型的脚本。 They have a tutorial for writing these scripts 因此它们很容易被系统识别,允许您将脚本通过管道连接在一起,称为 PypeS。我已经按照教程 完全 进行了显示,但最终得到了相同的“没有命名的模块:vmtk.name_of_script”错误。

我尝试过的:

教程说您可以将自定义脚本放在文件系统的任何位置,但无论如何都会出现问题。我目前在 MacOS High Sierra 上通过 Anaconda 使用 Python 3.6.10 和 VMTK 的二进制安装(而不是从源代码构建)。

真的 不想从源代码构建,因为我只需要预加载的脚本和编写新脚本的能力,而不是使用 C++ 文件脚本是从构建的。我被困了这么久,完全不确定问题出在哪里。我发现最接近的是解决这个问题的 SO 问题,但是 OP 只是说问题已经解决并且没有提供其他信息。

这是上述代码:

#!/usr/bin/env python

import sys

from vmtk import pypes
from vmtk import vmtkscripts

customscript = 'customScript'

class customScript(pypes.pypeScript):

    def __init__(self):
        pypes.pypeScript.__init__(self)

    def Execute(self): 
        pass

if __name__=='__main__':
    main = pypes.pypeMain()
    main.Arguments = sys.argv
    main.Execute()

根据教程,我还 运行 chmod u+x customscript.py 更改了我的文件的权限,以便我可以执行它。我卡在脚本应该在 VMTK 中执行最基本操作的位置。有什么想法吗?

编辑:这是确切的错误:

$ ./customscript.py 

No module named 'vmtk.customscript'
Traceback (most recent call last):
  File "/vmtk/lib/python3.6/site-packages/vmtk/pype.py", line 290, in Execute
    module = importlib.import_module('vmtk.'+scriptName)
  File "/vmtk/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 948, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'vmtk.customscript'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./customscript.py", line 21, in <module>
    main.Execute()
  File "/vmtk/lib/python3.6/site-packages/vmtk/pypescript.py", line 688, in Execute
    pipe.Execute()
  File "/vmtk/lib/python3.6/site-packages/vmtk/pype.py", line 298, in Execute
    self.PrintError(str(e))
  File "/vmtk/lib/python3.6/site-packages/vmtk/pype.py", line 102, in PrintError
    raise RuntimeError(errorMessage)
RuntimeError: No module named 'vmtk.customscript'

我想回溯问题,但我认为没有必要编辑任何预加载的文件。

我经过一周的尝试和搜索找到的解决方案:

  1. git clone vmtk repo onto your computer and follow the VMTK download 关于如何从源代码构建它的说明。绝对会让人头疼,是一个漫长的过程;等着吧。

    • 如果您的计算机上没有安装 cmake,他们会在他们的网站上提供 GUI 版本。我不确定它如何适用于 Windows,但它绝对适用于 Mac。
  2. 构建完成后,请确保您设置的每个 VMTK 终端实例 source vmtk_env.sh 来自该文件所在的路径。这将允许您使用 VMTK 环境。

  3. 编写自定义脚本后,确保按照教程中的所有说明进行操作(假设这是第一次),确保将其保存在“site-packages”文件夹中建文件夹。我的路径是“vmtk-build/lib/python-2.7/site-packages/vmtk/”。我目前正在寻找更新它正在使用的 Python 的版本,但这不是重点。

  4. 完成后,从终端导航到该文件夹​​,然后 运行 chmod u+x name_of_script.py(如果您使用的是基于 Unix 的操作系统)。这将允许您使用 ./name_of_script.py.

    执行文件
  5. 我相信这是由于 Python VMTK 正在使用的版本,但我出现了两个“没有命名模块”错误,每个错误都发生在不同的时间:一个用于 tkinter 和一个 joblib.

    • tkinter 问题可以通过进入导入所在的文件来解决,我相信 vmtkscripts.py,并更改 tkinter 的所有实例] 到 Tkinter(大写字母 T)。这是因为他们将模块的名称从 Python 2 更改为 3,因此在 Python 的较新版本中它将是 tkinter。这修复了第一个错误。

    • 当我试图修复joblib问题时,我发现我的系统上可用的另一个版本Python已经有了,因此我无法安装它通过点子。相反,您可以执行 python-2.7 -m pip install joblib 为特定版本的 Python 安装它。虽然我在这样做之前确实从我的计算机上卸载了 joblib

这应该可以解决所有问题。下次我尝试 运行 我的脚本时,它 运行 没有任何错误。

额外:我没有为此使用任何 Anaconda 环境。可能会回去尝试设置它,但我很高兴我让它工作了。此外,我从计算机中删除了 VMTK 的二进制安装。如果您只是要从源代码构建它,则无需保留它。通过运行宁vmtk命令设置source vmtk_env.sh后,您可以通过终端运行VMTK。