Python Camelot / Ghostscript“错误的架构”错误

问题描述

我遇到了一个错误,超出了我的调试能力。 Camelot 对 Ghostscript 的使用似乎发现了一个错误架构的可执行文件

采取的步骤:

  1. brew install Ghostscript
  2. 检查是否可以找到 Ghostscript 的可执行文件as per the docs,它找不到。
  3. /opt/homebrew/bin/opt/homebrew/lib 添加到适当的路径(我认为?)
  4. 根据 Camelot GitHub 上错误 #282 的解决方案,我更改了 camelot/camelot/ext/ghostscript/_gsprint.py Line 256

libgs = ctypes.util.find_library("gs")libgs = distutils.spawn.find_executable("gs")

  1. 再次检查依赖项,使用新的(以上)代码。成功。 /opt/homebrew/bin/gs
  2. python3.9 -m pip install camelot-py
  3. 尝试使用 Ghostscript 运行 Camelot。错误如下所示。

我应该注意,位置 gs 中的 /opt/homebrew/bin/gs 似乎是一个别名,不确定这是否重要,但它会抛出异常是有道理的。但是,错误中传达的接下来的两个“发现”,/opt/homebrew/bin/gs/opt/homebrew/Cellar/ghostscript/9.53.3_1/bin/gs 都是正确的可执行文件,据我所知。

常识告诉我,如果我使用的是 Windows,我会遇到 64 位与 32 位的问题……但我使用的是我不熟悉的 MacOS。

MacOS -- Apple Silicon M1 -- Python 3.9 -- brew 安装 Ghostscript -- pip 安装 camelot-py -- 通过 Jupiter notebook 尝试

edit -- 还应该注意 Python 2.7 是 MacBook 附带的基本安装,它建议不要删除它。 which pythonpython -- version 返回 2.7 版本,而不是我运行的 3.9 版本。

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/camelot/ext/ghostscript/_gsprint.py in <module>
    259     try:
--> 260         libgs = cdll.LoadLibrary("libgs.so")
    261     except OSError:

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py in LoadLibrary(self,name)
    451     def LoadLibrary(self,name):
--> 452         return self._dlltype(name)
    453 

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py in __init__(self,name,mode,handle,use_errno,use_last_error,winmode)
    373         if handle is None:
--> 374             self._handle = _dlopen(self._name,mode)
    375         else:

OSError: dlopen(libgs.so,6): image not found

During handling of the above exception,another exception occurred:

OSError                                   Traceback (most recent call last)
<ipython-input-4-3a80516ee21f> in <module>
      1 file = r"/Users/joe_kiefner/Documents/Projects/Migration Station/Data_Lake/Arkansas/AR_12_10_2020.pdf"
      2 
----> 3 tables = camelot.read_pdf(file,flavor = 'lattice',pages='5')
      4 
      5 t_df = tables[0].df

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/camelot/io.py in read_pdf(filepath,pages,password,flavor,suppress_stdout,layout_kwargs,**kwargs)
    111         p = PDFHandler(filepath,pages=pages,password=password)
    112         kwargs = remove_extra(kwargs,flavor=flavor)
--> 113         tables = p.parse(
    114             flavor=flavor,115             suppress_stdout=suppress_stdout,/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/camelot/handlers.py in parse(self,**kwargs)
    169             parser = Lattice(**kwargs) if flavor == "lattice" else Stream(**kwargs)
    170             for p in pages:
--> 171                 t = parser.extract_tables(
    172                     p,suppress_stdout=suppress_stdout,layout_kwargs=layout_kwargs
    173                 )

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/camelot/parsers/lattice.py in extract_tables(self,filename,layout_kwargs)
    400             return []
    401 
--> 402         self._generate_image()
    403         self._generate_table_bBox()
    404 

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/camelot/parsers/lattice.py in _generate_image(self)
    209 
    210     def _generate_image(self):
--> 211         from ..ext.ghostscript import Ghostscript
    212 
    213         self.imagename = "".join([self.rootname,".png"])

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/camelot/ext/ghostscript/__init__.py in <module>
     22 #
     23 
---> 24 from . import _gsprint as gs
     25 
     26 

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/camelot/ext/ghostscript/_gsprint.py in <module>
    274         if not libgs:
    275             raise RuntimeError("Please make sure that Ghostscript is installed")
--> 276         libgs = cdll.LoadLibrary(libgs)
    277 
    278 del __win32_finddll

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py in LoadLibrary(self,name)
    450 
    451     def LoadLibrary(self,name):
--> 452         return self._dlltype(name)
    453 
    454     __class_getitem__ = classmethod(_types.GenericAlias)

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py in __init__(self,winmode)
    372 
    373         if handle is None:
--> 374             self._handle = _dlopen(self._name,mode)
    375         else:
    376             self._handle = handle

OSError: dlopen(/opt/homebrew/bin/gs,6): no suitable image found.  Did find:
    /opt/homebrew/bin/gs: mach-o,but wrong architecture
    /opt/homebrew/Cellar/ghostscript/9.53.3_1/bin/gs: mach-o,but wrong architecture

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...