更改Inkscape的Python解释器

时间:2018-08-27 20:55:49

标签: python inkscape

使用Inkscape时,我不断收到错误消息,似乎暗示没有满足python 2 vs 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 个答案:

答案 0 :(得分:6)

我实际上是从Inkscape网站本身here找到了解决我问题的方法:

  

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

其中leads to this page,其中表示:

  

(通过首选项文件)选择特定的解释器版本   preferences.xml文件,用户可以设置特定的可执行文件   Inkscape应该用来执行扩展的解释器   特定类型。

     

如果系统的默认版本是   解释器与Inkscape扩展使用的解释器不兼容   子系统(例如,依赖inkex.py的Inkscape扩展将仅   在最近的一些Linux上可以使用Python 2(从Inkscape 0.92.1开始)   发行版,使用的默认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扩展的程序,以及   将字符串设置为python二进制文件的绝对路径   与Inkscape当前的扩展脚本兼容(在示例中   在下面,路径是“ /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来测试扩展。

答案 1 :(得分:0)

您的回答对我有帮助。但是我走了另一条路。使用.config/inkscape/extensionpyenv local 2.7.18文件夹中设置本地python。使用它安装所需的任何python依赖项,它都可以工作。

更改python解释器的设置对我不起作用。