【问题标题】:python can't import gimpfupython无法导入gimpfu
【发布时间】:2013-09-24 16:09:30
【问题描述】:

我正在尝试使用 pythonfu 编写一个 gimp 脚本。但是,当我尝试在本地运行脚本时,出现错误

`--> ./vvv.py
Traceback (most recent call last):
  File "./vvv.py", line 5, in <module>
    from gimpfu import *
ImportError: No module named gimpfu

我推测该脚本可能只能通过 gimp 加载。但是,脚本不会出现在 gimp 菜单中。这种情况下,如何获取错误输出?

【问题讨论】:

  • @hus787 谢谢。这是我尝试自己编写的插件。我想知道的是如何判断插件不加载的原因。

标签: python gimp python-fu gimpfu


【解决方案1】:

根据您的操作系统,您必须查找 GIMP 插件的目录,例如:

GIMP 2\lib\gimp\2.0\plug-ins 

并在那里复制您的脚本。当然,您必须添加类似这样的注册内容:

register(
    "python-fu-draw",                                #<- this is plugin name
    N_("brief"),                                     #<- description
    "Long",                                          #<- description
    "name surname",                                  #<- author
    "@Copyright 2013",                               #<- copyright info
    "2013/10/29",                                    #<- creation date
    N_("_Draw..."),                                  #<- label shown in gimp's menu
    "",  #<- kind of image requested from your script (INDEX,RGB,...and so on)
    [                                                #<- input parameters array
        (PF_FILE, "ifile", N_("Color input file"), 'default.txt'),
],
[],                                                  #<- output parameters array (usually empty)
draw,                                                #<- main method to call 
menu="<Image>/Filters/",                             #<- Where add your plugin
domain=("gimp20-python", gimp.locale_directory) 
)

main()                                               #<- don't forget this

一旦您将脚本复制到具有正确注册内容的正确目录中,您就可以运行 GIMP 并运行您的脚本,在您在注册内容中选择的下拉菜单中选择它。 您不必从 python 控制台运行它。所以这些都行不通:

python myscript.py
./myscript.py
>>> myscript

要交互式地调试你的脚本,从 gimp 打开一个 python-fu 控制台:

Filters->Python-fu->Console

看看this 网站。主要是幻灯片非常有用。

如果您想以批处理模式运行脚本,请查看this

【讨论】:

    【解决方案2】:

    这是预期的行为。 GIMP 的 Python 插件有一个不同寻常的设计:不要直接调用 Python 脚本,而是调用 GIMP,它会依次调用你的脚本(GUI 和命令行脚本都是如此)。


    1. 确保在脚本末尾注册您的中心函数:

      from gimpfu import *
      
      # ... your script ...
      
      args = [(PF_STRING, 'file', 'GlobPattern', '*.*')]   # adjust to your function
      register('my-script', '', '', '', '', '', '', '', args, [], my_function)
      main()   # GIMP's main(), do not write your own!
      
    2. 标记您的脚本可执行文件

      chmod +x my_script.py
      
    3. 复制、移动或硬链接您的脚本,使其位于 GIMP 的插件目录中:

      ln my_script.py ~/.gimp-2.8/plug-ins/my_script.py
      
    4. 您现在可以调用 GIMP,它会调用您的脚本(警告:GIMP 有点慢)

      gimp -i -b '(my-script RUN-NONINTERACTIVE "example.png")' -b '(gimp-quit 0)'
      

      如上所述,请勿这样做:

      python my_script.py   # bad!
      

    括号是由于它是一个 Scheme 函数调用。出于同样的原因,您必须用下划线替换可用函数列表中的所有连字符(可以在Help &gt; Procedure Browser 下的 GIMP GUI 中找到)。

    如果您需要示例脚本,请查看 the documentationmy script

    【讨论】:

      【解决方案3】:

      Python 插件没有出现在 GIMP 中的一个常见原因是语法错误。一种快速、可编写脚本的检查方式:

      python -m py_compile vvv.py

      在 Windows 平台上,成功的编译将返回 0 的 %errorlevel%

      【讨论】:

        【解决方案4】:

        转述原帖:我写了一个 Python GIMP 插件并安装在正确的位置,但它没有出现在 GIMP 的过滤器菜单中,那么我该如何调试呢?

        最常见的原因是当您将插件的源 (.py) 文件复制到正确的位置时,您没有授予执行权限。 (GIMP 的一个已知怪癖是它不会读取没有执行权限的 Python 插件源。)

        另一个问题可能是:我的插件出现在 GIMP 过滤器菜单中,但它并没有像我预期的那样正常工作,我该如何调试它?

        您可以在控制台(终端)中启动 GIMP,以便插件中的任何调试打印都进入控制台,或者按照另一个答案中的建议使用 Filters>Python-Fu>Console。

        如果您的插件崩溃,GIMP GUI 将向您显示回溯,或者它会出现在您启动 GIMP 的控制台中。

        另一个问题可能是:我可以调试导入 PyGimp 模块的 Python 脚本吗? (最常见的是 gimpfu,它是一个导入其他 PyGimp 模块的综合模块。)例如,您有一个供 GIMP Python 插件使用的 Python 模块,并且您想在不启动 GIMP 的情况下测试它的一部分(例如,对其进行 doctest) .

        您也许可以按照标准安装 PyGimp(到 Python 目录中):下载 PyGimp、.configure、make、make install。 (我没有尝试过,也无法轻松找到 PyGimp 的可下载源包。)通常,PyGimp 模块与 GIMP 一起安装,而不是安装在 Python 目录中(GIMP 只是在启动 Python 解释器时与 PYTHON_PATH 混淆,所以找到 PyGimp 模块?)或者在您的环境(shell 或 IDE)中,您可以更改 PYTHON_PATH 以便它包含包含 PyGimp 模块的 GIMP 安装的子目录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-30
          • 2016-04-15
          • 2015-06-22
          • 2019-10-25
          • 2010-10-11
          • 2019-05-07
          • 2014-06-29
          • 1970-01-01
          相关资源
          最近更新 更多