更改Inkscape的Python解释器

8

在使用Inkscape时,我经常遇到错误提示,这些错误似乎暗示着一个Python 2和3版本不兼容的问题,虽然我已经同时安装了这两个版本。例如,当我尝试从模板新建文档时,会出现以下错误:

Traceback (most recent call last):
  File "empty_generic.py", line 82, in <module>
    c.affect()
  File "/usr/share/inkscape/extensions/inkex.py", line 285, in affect
    self.output()
  File "/usr/share/inkscape/extensions/inkex.py", line 272, in output
    self.document.write(sys.stdout)
  File "src/lxml/lxml.etree.pyx", line 2033, in lxml.etree._ElementTree.write (src/lxml/lxml.etree.c:63667)
  File "src/lxml/serializer.pxi", line 524, in lxml.etree._tofilelike (src/lxml/lxml.etree.c:134877)
  File "src/lxml/lxml.etree.pyx", line 324, in lxml.etree._ExceptionContext._raise_if_stored (src/lxml/lxml.etree.c:10737)
  File "src/lxml/serializer.pxi", line 441, in lxml.etree._FilelikeWriter.write (src/lxml/lxml.etree.c:133581)
TypeError: write() argument must be str, not bytes

似乎最后一行就是我所说的——通常这个错误是由于使用Python 3解释器运行Python 2代码引起的,可以通过将字符串对象str作为str.decode()传递或其他方式来修复。显然,编辑inkscape源代码并不是一个理想的解决方案。

此外,在尝试生成Voronoi图时,我遇到了以下问题:

Traceback (most recent call last):
  File "voronoi2svg.py", line 36, in <module>
    import simplepath
  File "/usr/share/inkscape/extensions/simplepath.py", line 51
    raise Exception, 'Invalid path data!'
                   ^
SyntaxError: invalid syntax

这似乎又是一个明显的2 vs. 3错误。

有没有办法更改Inkscape使用的Python解释器?

2个回答

26

我实际上在Inkscape网站本身这里找到了解决我的问题的答案:

如果您的操作系统(如Linux发行版)使用与Inkscape扩展所需不同的Python(或Perl、Ruby等)默认版本,请参阅 Extension Interpreters 以了解如何设置Inkscape将使用的解释器。 最常见的例子是操作系统的默认Python版本为3,但是Inkscape需要Python2,从而导致所有扩展都会出错。

这个页面 在该段落下面提供了更多信息:

选择特定的解释器版本(通过首选项文件) 用户可以在 preferences.xml 文件中设置一个特定的可执行文件,使 Inkscape 可以使用它来执行特定类型的扩展程序。

如果系统的默认解释器版本与 Inkscape 的扩展子系统所使用的版本不兼容,则此功能尤其有用(例如,依赖于 inkex.py 的 Inkscape 扩展仅适用于 Python 2(截至 Inkscape 0.92.1),而在某些最新的 Linux 发行版上,默认使用的 Python 版本为 Python 3,这会在执行扩展期间导致错误)。

要更改用于运行脚本扩展名的可执行文件以与上表中的默认值不同,请执行以下操作:

退出所有正在运行的 Inkscape 进程 使用文本编辑器打开 perferences.xml 文件 (通过转到编辑->首选项->系统:用户首选项查找该文件的确切位置)搜索包含扩展系统本身设置和各种扩展选项的组:

<group
 id="extensions"org.ekips.filter.gears.teeth="24"
 org.ekips.filter.gears.pitch="20"
 org.ekips.filter.gears.angle="20" />

插入一个解释器的键,例如“python-interpreter”用于设置运行Python扩展所需的程序,并将字符串设置为与Inkscape当前扩展脚本兼容的Python二进制文件的绝对路径(在下面的示例中,路径为"/usr/bin/python2.7"。在Windows系统上会有所不同。):

<group
 id="extensions"
 python-interpreter="/usr/bin/python2.7"org.ekips.filter.gears.teeth="24"
 org.ekips.filter.gears.pitch="20"
 org.ekips.filter.gears.angle="20" />

保存偏好设置文件,并启动Inkscape来测试扩展功能。


2
请记得在关闭Inkscape时编辑首选项文件,否则它将被覆盖并且您将失去更改。 - titusfx
我更改了 python-interpreter="/usr/bin/python3.7。语法错误消失了,但是当我点击“应用”时,什么也没有发生。没有弹出错误,也没有生成gcode文件。 - Edwin Varghese
我解决了。对于我来说,它是/home/username/anaconda3/bin/python。我去视图>消息查看日志并单击捕获日志消息。然后我找到了问题的原因。 - Edwin Varghese

0
你的回答对我有帮助。但我选择了另一种方式。我在`.config/inkscape/extension`文件夹中设置了一个本地的Python环境,使用了`pyenv local 2.7.18`命令。安装所需的所有Python依赖项后,它可以正常工作。
改变Python解释器的设置对我来说没有起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接