让 cairosvg 在 windows 中工作
get cairosvg working in windows
正在尝试使此代码正常工作:
import cairosvg
import os
path = "D:/PyProjects/Bla/Temp"
os.chdir(path)
cairosvg.svg2pdf(url='Pic.svg', write_to='image.pdf')
但会出现类似这样的错误 post:
Traceback (most recent call last):
File "D:/work/lean_python/pdf/other.py", line 2, in <module>
import cairosvg
File "D:\env_python352\lib\site-packages\cairosvg\__init__.py", line 29, in <module>
from . import surface
File "D:\env_python352\lib\site-packages\cairosvg\surface.py", line 24, in <module>
import cairocffi as cairo
File "D:\env_python352\lib\site-packages\cairocffi\__init__.py", line 46, in <module>
cairo = dlopen(ffi, 'cairo', 'cairo-2')
File "D:\env_python352\lib\site-packages\cairocffi\__init__.py", line 43, in dlopen
raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2
post提到:
CairoSVG (the python library and bindings) needs Cairo (The C library, part of GTK+) to run. It appears you don't have it an it's headers installed on your system.
所以我按照 here 中描述的步骤 1 - 5 进行操作。我现在有 cairo 头文件:
C:\msys64\mingw64\include\cairo
我还安装了另一个来源推荐的pycairo:
pip install pycairo-1.15.2-cp36-cp36m-win_amd64.whl
我仍然遇到上述错误。有什么想法吗?
我只是没有让 cairosvg 工作。我找到了一种使用 svglib 包将 svg 转换为 png 的替代方法。
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPDF, renderPM
import os
path = "D:/Bla/Temp"
os.chdir(path)
drawing = svg2rlg("Pic.svg")
renderPM.drawToFile(drawing, "Pic.png")
请检查 libcairo-2.dll
与 ctypes.util
的路径。
在我的例子中,它是一个名为 Graphviz
.
的旧软件目录
python
>>> import ctypes.util
>>> path = ctypes.util.find_library('libcairo-2')
>>> print(path)
C:\Program Files (x86)\Graphviz 2.28\bin\libcairo-2.dll
卸载后Graphviz
。
python
>>> import ctypes.util
>>> path = ctypes.util.find_library('libcairo-2')
>>> print(path)
C:\msys64\mingw64\bin\libcairo-2.dll
以下解决方法适用于我:
- 安装 cairosvg (
python -m pip install cairosvg
)
- 运行
import cairosvg
在脚本中。
- 如果成功了,就大功告成了。否则 (
OSError: no library called "cairo" was found
):
- 获取 libcairo-2.dll 的副本
- 我通过从
uniconvertor-2.0rc4-win64_headless.msi
https://sk1project.net/uc2/download/ 安装来做到这一点
- 然后寻找
libcairo-2.dll
的安装位置。
- 说路径是
C:\path\cairo\dlls\libcairo-2.dll
- 在您的脚本中添加到顶部(在导入 cairosvg 之前)
import os
os.environ['path'] += r';C:\path\cairo\dlls'
import cairosvg
现在应该会成功并工作。
(假设您是 运行宁 64 位版本的 Python,否则使用 win32_headless.msi
)
正在尝试使此代码正常工作:
import cairosvg
import os
path = "D:/PyProjects/Bla/Temp"
os.chdir(path)
cairosvg.svg2pdf(url='Pic.svg', write_to='image.pdf')
但会出现类似这样的错误 post:
Traceback (most recent call last):
File "D:/work/lean_python/pdf/other.py", line 2, in <module>
import cairosvg
File "D:\env_python352\lib\site-packages\cairosvg\__init__.py", line 29, in <module>
from . import surface
File "D:\env_python352\lib\site-packages\cairosvg\surface.py", line 24, in <module>
import cairocffi as cairo
File "D:\env_python352\lib\site-packages\cairocffi\__init__.py", line 46, in <module>
cairo = dlopen(ffi, 'cairo', 'cairo-2')
File "D:\env_python352\lib\site-packages\cairocffi\__init__.py", line 43, in dlopen
raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2
post提到:
CairoSVG (the python library and bindings) needs Cairo (The C library, part of GTK+) to run. It appears you don't have it an it's headers installed on your system.
所以我按照 here 中描述的步骤 1 - 5 进行操作。我现在有 cairo 头文件:
C:\msys64\mingw64\include\cairo
我还安装了另一个来源推荐的pycairo:
pip install pycairo-1.15.2-cp36-cp36m-win_amd64.whl
我仍然遇到上述错误。有什么想法吗?
我只是没有让 cairosvg 工作。我找到了一种使用 svglib 包将 svg 转换为 png 的替代方法。
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPDF, renderPM
import os
path = "D:/Bla/Temp"
os.chdir(path)
drawing = svg2rlg("Pic.svg")
renderPM.drawToFile(drawing, "Pic.png")
请检查 libcairo-2.dll
与 ctypes.util
的路径。
在我的例子中,它是一个名为 Graphviz
.
python
>>> import ctypes.util
>>> path = ctypes.util.find_library('libcairo-2')
>>> print(path)
C:\Program Files (x86)\Graphviz 2.28\bin\libcairo-2.dll
卸载后Graphviz
。
python
>>> import ctypes.util
>>> path = ctypes.util.find_library('libcairo-2')
>>> print(path)
C:\msys64\mingw64\bin\libcairo-2.dll
以下解决方法适用于我:
- 安装 cairosvg (
python -m pip install cairosvg
) - 运行
import cairosvg
在脚本中。 - 如果成功了,就大功告成了。否则 (
OSError: no library called "cairo" was found
): - 获取 libcairo-2.dll 的副本
- 我通过从
uniconvertor-2.0rc4-win64_headless.msi
https://sk1project.net/uc2/download/ 安装来做到这一点
- 然后寻找
libcairo-2.dll
的安装位置。
- 我通过从
- 说路径是
C:\path\cairo\dlls\libcairo-2.dll
- 在您的脚本中添加到顶部(在导入 cairosvg 之前)
import os
os.environ['path'] += r';C:\path\cairo\dlls'
import cairosvg
现在应该会成功并工作。
(假设您是 运行宁 64 位版本的 Python,否则使用 win32_headless.msi
)