簡體   English   中英

在python中導入pygrib

[英]importing pygrib in python

盡管在pygrib安裝中沒有遇到任何錯誤,但是在導入pygrib時遇到了以下錯誤:

>>> import pygrib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /python/python-2.7.13/lib/python2.7/site-packages/pygrib.so: undefined symbol: __svml_round2_mask

關於什么可能導致此“未定義符號”錯誤的任何建議?

未定義的符號錯誤通常是由以下兩種原因之一引起的:

  • 在構建過程中鏈接不正確,或者
  • 用於構建二進制文件或庫的環境與運行它的環境之間的不匹配。

鏈接不正確

如果要構建pygrib模塊本身,請確保正確鏈接了所需的庫依賴關系,並且順序正確。 基於缺少的符號名稱__svml_round2_mask ,我想您的pygrib.so是使用Intel icc C編譯器編譯的,需要鏈接到包含SVML(短矢量數學庫)功能的數學庫。 在不了解構建環境的更多細節的情況下很難獲得更具體的信息,但是例如,在linux上, iccgcc (都稱為GNU ld進行鏈接)都需要在命令行上指定該數學庫,並且它需要緊跟調用它的二進制文件或庫之后

環境不匹配

如果您不是由pygrib構建的(顯式地構建,或者作為pipconda install命令的一部分),則可能是環境不匹配。 當您下載的pygrib.so是針對不同於已安裝庫的庫構建的時,會發生這種情況。 理想情況下,所有Python二進制軟件包都將基於非常原始的庫集構建(例如linux wheel的“ manylinux1”容器),以便它們可以在大多數系統上運行,但是有時需要使用特定的特殊性能和關鍵性軟件包來構建優化或針對不常見的庫。 如果這些優化或庫在構建系統和安裝了最終軟件包的系統之間不匹配,則可能導致undefined symbol錯誤。

減少這種情況發生的一種方法是,在可能的情況下,不要混搭軟件包存儲庫。 也就是說,如果您使用的是Anaconda,則只能從Anaconda中提取包裹。 我知道,並非總是可能,對吧?

如果您使用的是Linux,有時可以使用ldd命令找出不匹配的位置,例如:

$ ldd -r /python/python-2.7.13/lib/python2.7/site-packages/pygrib.so

您會看到一堆以Py_Py開頭的未定義符號- _Py它們,它們由Python本身提供。 但是,在其中的那些中,您有望發現哪個特定的庫需要__svml_round2_mask 仔細查看其完整路徑以及列出的其他庫的完整路徑,這可能表明不匹配的來源。

其他建議

  • 在您的問題中包括更多詳細信息,例如您的操作系統以及如何安裝pygrib及其依賴項,可能使我們能夠提供更具體的建議。
  • 如果您的問題的標題更加具體,則可能會引起更多關注。
  • 您是否嘗試過其他pygrib軟件包? Conda-forge列出了幾個; 其中之一可能與您的系統匹配。
  • 您是否嘗試過python-eccodes模塊? 它似乎是pygrib的推薦繼任者。

祝你好運,我希望這里有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM