Anaconda"無法定位程序輸入點 OPENSSL_sk_new_reserve 於動態鏈接庫Anaconda3\Library\bin\libssl-1_1-x64.dll上"的解決辦法
參閱:https://stackoverflow.com/a/59884311/625350
問題描述
在anaconda上來來回回裝了好些個包之后、不同環境下裝了不同python版本后報錯,自此無法conda install,十分麻煩,參閱了CSDN上各種解決方法,主要是將DLLs里的libssl-1_1-x64.dll文件復制粘貼到bin里,完全治標不治本,要不就是打不開anaconda,要不就是還不能install,歲將問題翻成英文,去StackOverflow上尋找答案。
解決方法
次解決方法為StackOverflow上titusjan用戶提出,我個人試驗后可行,將谷歌翻譯后版本給出:
正如Anaconda維護人員在這里(https://github.com/conda/conda/issues/9003#issuecomment-553529174)提到的...
那樣移動libssl dll實在不可取。那些DLL是重復的,因為您的程序包中有些混亂。DLLs文件夾中不應有任何openssl DLL。它們應該在Library / bin中
通過查看conda-meta目錄中的JSON文件,我發現DLLs\libssl-1_1-x64.dll該python 3.7.0軟件包Library\bin\libssl-1_1-x64.dll已安裝且已由openssl軟件包安裝。經過進一步調查,我發現了Python 3.7.0並沒有安裝OpenSSL的作為一個單獨的包,但是Python 3.7.1(或更高版本)呢。
通常,升級Python會按預期進行,但是如果您最終以某種方式同時將它們python 3.7.0和openssl軟件包同時安裝,將會有兩個libssl-1_1-x64.dll文件,並且您的Anaconda發行版將被破壞。(您可以使用conda list命令輕松地對此進行驗證。)
我認為解決此問題的最佳方法是:
-
重命名Library\bin\libssl-1_1-x64.dll為Library\bin\libssl-1_1-x64.dll.org(您稍后將需要它。)
-
復制DLLs\libssl-1_1-x64.dll到Library\bin\libssl-1_1-x64.dll
-
使用conda update python將Python版本更新。這將刪除DLLs\libssl-1_1-x64.dll文件。
-
重命名Library\bin\libssl-1_1-x64.dll.org為Library\bin\libssl-1_1-x64.dll。這是必要的,因為否則下一步將出現HTTP錯誤。
-
使用conda install openssl --force-reinstall重新安裝OpenSSL以確保它是最新的。
總結
事實上,DLL文件夾里的libssl-1_1-x64.dll文件完全是不應該存在的,根據官方說法將anaconda添加到system path也是不好的,所以實在不行不如重裝。(anaconda真的麻煩)