VMTK自定义脚本生成“没有名为:VMTK.custom的模块”错误

2024-09-29 00:20:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我所尝试的:

  • 将脚本放在与模块提供的所有预加载脚本相同的目录中,以便__init__.py可以捕获它
  • 将代码从网站复制粘贴到我的编辑器中,因此我确信我所写的内容没有错误
  • 将问题直接提交到论坛是为了回答有关VMTK的问题,在过去一周半内没有任何回复
  • 将Python解释器更改为VMTK目录中的解释器

本教程说,您可以将自定义脚本放在文件系统中的任何位置,但无论如何都会出现问题。我目前通过Anaconda使用Python3.6.10,并在MacOS High Sierra上二进制安装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'

我想追溯这个问题,但我不认为编辑任何预加载的文件是必要的


Tags: inpyimport脚本executeinitmainlib
1条回答
网友
1楼 · 发布于 2024-09-29 00:20:37

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

  1. git clonevmtk repo安装到您的计算机上,并按照VMTK download说明如何从源代码构建它。这绝对会让人感到头痛,而且是一个漫长的过程;就等着吧

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

  3. 编写自定义脚本后,请确保遵循教程中的所有说明(假设这是第一次),确保将其保存在build文件夹中的“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. 我相信这是由于PythonVMTK正在使用的版本,但是我出现了两个“No module named”错误,每个错误都是在不同的时间出现的:一个用于tkinter,另一个用于joblib

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

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

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

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

相关问题 更多 >