[英]Installing “pygrib” package on Windows: problem with “Python.h” file
[英]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上, icc
和gcc
(都稱為GNU ld
進行鏈接)都需要在命令行上指定該數學庫,並且它需要緊跟在調用它的二進制文件或庫之后 。
如果您不是由pygrib構建的(顯式地構建,或者作為pip
或conda
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.