Mac下Jupyter Notebook 打開openssl報(bào)錯(cuò)

這個(gè)問題之前就遇到了,今天終于下定決定好好解決一下,順便回顧一下conda。

Mac下環(huán)境變量

Mac配置環(huán)境變量的地方,再mark一下:

?1./etc/profile ? (建議不修改這個(gè)文件 )

?全局(公有)配置,不管是哪個(gè)用戶,登錄時(shí)都會(huì)讀取該文件。

?2./etc/bashrc ? ?(一般在這個(gè)文件中添加系統(tǒng)級環(huán)境變量)

?全局(公有)配置,bash shell執(zhí)行時(shí),不管是何種方式,都會(huì)讀取此文件。

?3.~/.bash_profile ?(一般在這個(gè)文件中添加用戶級環(huán)境變量)

?每個(gè)用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時(shí),該文件僅僅執(zhí)行一次!

Anaconda

conda是個(gè)好東西,能根據(jù)需要隔離環(huán)境,想用什么版本的python用什么版本的,想裝tensorflow裝tf,想裝pytorch裝torch。

Anaconda裝完之后會(huì)自動(dòng)進(jìn)入base環(huán)境,這個(gè)時(shí)候在terminal里面使用的是base環(huán)境下的python。

可以看到安裝完之后初始化的內(nèi)容就加到環(huán)境變量里面:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/claire/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
??? eval "$__conda_setup"
else
??? if [ -f "/Users/claire/anaconda2/etc/profile.d/conda.sh" ]; then
??????? . "/Users/claire/anaconda2/etc/profile.d/conda.sh"
??? else
??????? export PATH="/Users/claire/anaconda2/bin:$PATH"
??? fi
fi
unset __conda_setup
# <<< conda initialize <<<

在echo $PATH的時(shí)候,python就會(huì)用conda的python bin:

(test) localhost:data claire$ echo $PATH

/Users/claire/anaconda2/envs/test/bin:/Users/claire/anaconda2/condabin:/project/claireBlog/apache-maven-3.5.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/project/go/bin:/usr/local/zookeeper/bin


一般使用anaconda幾個(gè)常用命令mark一下:

1. 創(chuàng)建環(huán)境:conda create -n <your_env_name> python=X.X

2. 查看環(huán)境:conda env list

3. 激活環(huán)境:conda activate <your_env_name>

4. 關(guān)閉環(huán)境:conda deactivate

5. 安裝包: conda install <package_name>

6. 刪除包:conda remove <package_name>

7.查看版本:conda --version (4.6.8)


Jupyter Notebook

jupyter nodebook很適合python交互,是一個(gè)基于web的交互式計(jì)算環(huán)境,可以做到在瀏覽器里面單不運(yùn)行python代碼。

Tornado是使用python編寫的Web服務(wù)器兼Web應(yīng)用框架,異步非阻塞式服務(wù)器(單進(jìn)程單線程異步IO,適合用來開發(fā)長輪詢、WebSocket和需要與每個(gè)用戶建立持久連接的應(yīng)用。

因?yàn)榭吹絁upyter起來的時(shí)候會(huì)調(diào)用Tornado的包,于是特意看了眼,官網(wǎng)上是這樣說的:

Running a notebook server — Jupyter Notebook 6.0.3 documentation

The Jupyter notebook web application is based on aserver-client structure. The notebook server uses a two-process kernelarchitecture based on ZeroMQ, as well as Tornado forserving HTTP requests.

Jupyter notebook是CS模式的Web應(yīng)用,他用Tornado來處理HTTP請求,并且由于Tornado的特性,他不支持多用戶,如果想要多用戶服務(wù)器,官方建議用JupyterHub。

關(guān)于ZeroMQ,也捎帶著看了一下,號稱是“史上最快的消息隊(duì)列”,基于c語言開發(fā)的。

引用官方說法,“ZMQ(以下ZeroMQ簡稱ZMQ)是一個(gè)簡單好用的傳輸層,像框架一樣的一個(gè)socket library,他使得Socket編程更加簡單、簡潔和性能更高。是一個(gè)消息處理隊(duì)列庫,可在多個(gè)線程、內(nèi)核和主機(jī)盒之間彈性伸縮。ZMQ的明確目標(biāo)是“成為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議棧的一部分,之后進(jìn)入Linux內(nèi)核”?,F(xiàn)在還未看到它們的成功。但是,它無疑是極具前景的、并且是人們更加需要的“傳統(tǒng)”BSD套接字之上的一 層封裝。ZMQ讓編寫高性能網(wǎng)絡(luò)應(yīng)用程序極為簡單和有趣?!?確實(shí),它跟RabbitMQ,ActiveMQ之類有著相當(dāng)本質(zhì)的區(qū)別,ZeroMQ根本就不是一個(gè)消息隊(duì)列服務(wù)器,更像是一組底層網(wǎng)絡(luò)通訊庫,對原有的Socket API加上一層封裝,是我們操作更簡便。使用時(shí)只需要引入相應(yīng)的jar包即可。

淺析ZeroMQ_大數(shù)據(jù)_AudiFashion的博客-CSDN博客

Mac的openssl問題

在terminal嘗試打開jupyter notebook,報(bào)ssl的錯(cuò):

Traceback (most recent call last):

File "/usr/local/bin/jupyter-notebook", line 7, in

from notebook.notebookapp import main

File "/usr/local/lib/python3.7/site-packages/notebook/notebookapp.py", line 62, in

from tornado import httpserver

File "/usr/local/lib/python3.7/site-packages/tornado/httpserver.py", line 29, in

import ssl

File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 98, in

import _ssl? ? ? ? ? ? # if we can't import it, let the error propagate

ImportError: dlopen(/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib

Referenced from: /usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so

Reason: image not found

后來發(fā)現(xiàn)是mac升級之后openssl的問題:

openssl Issue in Mac · Issue #6180 · microsoft/azuredatastudio · GitHub

這里說到workaround是使用命令 brew install openssl 重裝openssl

不過試了試了一下,openssl已經(jīng)是最新的1.1:

Warning: openssl@1.1 1.1.1d is already installed and up-to-date

還有人說卸了再重裝,其實(shí)也沒什么用。

后來看到一篇神文,說要從1.1切換到舊版本1.0的openssl就可以了。

swift - dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib - Stack Overflow

首先用 ls -al /usr/local/Cellar/openssl 命令查看版本:

(test) localhost:data claire$? ls -al /usr/local/Cellar/openssl
total 0
drwxr-xr-x?? 3 claire? staff??? 96 Apr 15? 2019 .
drwxrwxr-x? 97 claire? admin? 3104 Apr 27 14:26 ..
drwxr-xr-x? 13 claire? staff?? 416 Apr 15? 2019 1.0.2r

然后用 brew switch openssl 1.0.2r 切換版本。

自此,解決問題。

再用jupyter notebook,正常打開。


雖然到最后也沒有用網(wǎng)頁版的,用的vscode切換到conda環(huán)境里它自己裝的,感覺現(xiàn)在IDE對jupyter的集成很棒也很方便,但是終于算是解了這個(gè)問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容