使用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解释器?
答案 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/extension
在pyenv local 2.7.18
文件夹中设置本地python。使用它安装所需的任何python依赖项,它都可以工作。
更改python解释器的设置对我不起作用。