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”错误。
我尝试过的:
- 将脚本放在与模块提供的所有预加载脚本相同的目录中,以便
__init__.py
可以捕获它
- 将网站上的代码复制粘贴到我的编辑器中,以确保我所写的内容没有错误
- 直接将问题提交到论坛,用于对 VMTK 提出问题,过去一周半没有回复
- 将我的 Python 解释器更改为 VMTK 目录中的解释器
教程说您可以将自定义脚本放在文件系统的任何位置,但无论如何都会出现问题。我目前在 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'
我想回溯问题,但我认为没有必要编辑任何预加载的文件。
我经过一周的尝试和搜索找到的解决方案:
git clone
vmtk repo onto your computer and follow the VMTK download 关于如何从源代码构建它的说明。绝对会让人头疼,是一个漫长的过程;等着吧。
- 如果您的计算机上没有安装 cmake,他们会在他们的网站上提供 GUI 版本。我不确定它如何适用于 Windows,但它绝对适用于 Mac。
构建完成后,请确保您设置的每个 VMTK 终端实例 source vmtk_env.sh
来自该文件所在的路径。这将允许您使用 VMTK 环境。
编写自定义脚本后,确保按照教程中的所有说明进行操作(假设这是第一次),确保将其保存在“site-packages”文件夹中建文件夹。我的路径是“vmtk-build/lib/python-2.7/site-packages/vmtk/”。我目前正在寻找更新它正在使用的 Python 的版本,但这不是重点。
完成后,从终端导航到该文件夹,然后 运行 chmod u+x name_of_script.py
(如果您使用的是基于 Unix 的操作系统)。这将允许您使用 ./name_of_script.py
.
执行文件
我相信这是由于 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。
我正在使用一个名为 VMTK 的模块来构建用于分析血管模型的脚本。 They have a tutorial for writing these scripts 因此它们很容易被系统识别,允许您将脚本通过管道连接在一起,称为 PypeS。我已经按照教程 完全 进行了显示,但最终得到了相同的“没有命名的模块:vmtk.name_of_script”错误。
我尝试过的:
- 将脚本放在与模块提供的所有预加载脚本相同的目录中,以便
__init__.py
可以捕获它 - 将网站上的代码复制粘贴到我的编辑器中,以确保我所写的内容没有错误
- 直接将问题提交到论坛,用于对 VMTK 提出问题,过去一周半没有回复
- 将我的 Python 解释器更改为 VMTK 目录中的解释器
教程说您可以将自定义脚本放在文件系统的任何位置,但无论如何都会出现问题。我目前在 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'
我想回溯问题,但我认为没有必要编辑任何预加载的文件。
我经过一周的尝试和搜索找到的解决方案:
git clone
vmtk repo onto your computer and follow the VMTK download 关于如何从源代码构建它的说明。绝对会让人头疼,是一个漫长的过程;等着吧。- 如果您的计算机上没有安装 cmake,他们会在他们的网站上提供 GUI 版本。我不确定它如何适用于 Windows,但它绝对适用于 Mac。
构建完成后,请确保您设置的每个 VMTK 终端实例
source vmtk_env.sh
来自该文件所在的路径。这将允许您使用 VMTK 环境。编写自定义脚本后,确保按照教程中的所有说明进行操作(假设这是第一次),确保将其保存在“site-packages”文件夹中建文件夹。我的路径是“vmtk-build/lib/python-2.7/site-packages/vmtk/”。我目前正在寻找更新它正在使用的 Python 的版本,但这不是重点。
完成后,从终端导航到该文件夹,然后 运行
执行文件chmod u+x name_of_script.py
(如果您使用的是基于 Unix 的操作系统)。这将允许您使用./name_of_script.py
.我相信这是由于 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。