你踩過這個坑?
- 2019 年 10 月 5 日
- 筆記
你踩過這個坑?
0.說在前面
這幾天在做cs231n assignment2的時候,遇到了一個很嚴重的問題,但是現在解決了,所以就沒問題。對於我而言,我非常喜歡問題,因為這樣可以迅速提升自我,我們要學會針對性解決問題,遇事不怕的能力!那麼我又碰到了什麼問題了?如何利用Google很好的解決問題?下面一起來見證解決問題的方法!
這次跑的是cnn模型,需要cython支援,所以就會有問題,我想說的是因為這個問題,讓許多人放棄了win系統,跑去裝linux系統,我更想說的是,linux也好win也好,都有各的好處,有人說win簡單,linux難,其實在我看來都一樣,主要是我們得學會解決問題的能力,又想起了亮劍裡面的一句話:「狹路相逢勇者勝」!
1.No zuo No die
當我運行到fast layers的時候,碰到如下錯誤:name 'col2im_6d_cython' is not defined。
呀,我碰到問題了,慌了,莫慌,來Google,又到網上搜了一大堆,沒啥用,又不懂這個是啥子問題!
然後我們看報錯地方,再看上面的注釋解釋,發現了一行很關鍵的命令我沒執行,那就是:
The fast convolution implementation depends on a Cython extension; to compile it you need to run the following from the cs231n
directory:python setup.py build_ext --inplace
中文意思是,這個fast卷積實現依賴於Cython擴展,你需要在cs231n目錄下運行python setup.py build_ext --inplace
那很簡單啊,問題也很明確,既然依賴於cython,那我們裝一下,在運行一下不就ok了?
我們先來裝一下,命令如下:
pip install -U cython
然後在dos下面或者git裡面運行python setup.py build_ext --inplace
,結果你猜怎麼著?
又報錯了,這次更嚴重了!!!
報了什麼錯?那就是:error: Unable to find vcvarsall.bat
這個又是啥子鬼,這個不是鬼東西,這想表達的是沒有找到這個文件。
現在來說一下這個原理:在linux中有gcc直接編譯,完全沒問題,但是在win10中可是沒有gcc的,那麼對於win10中系統編譯工具默認是visual studio!
當然網上也有mingw解決的,大家可以查查哈,這裡不推薦這個辦法,萬一後面又出現問題呢,所以治病得根治!
下面來根治這個辦法,通過Google,找到了How to deal with the pain of 「unable to find vcvarsall.bat」這篇文章,不好意思,我找到的是純英文,很好理解,並且是在微軟官網!
How to deal with the pain of 「unable to find vcvarsall.bat地址: https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/
那麼大家來看一下,官網給出的解決方案!

大家看到了沒,對於不同的python環境,要求安裝不同的vs,由於我的python為3.6哦,所以我就直接是第一個,上面的英文表達意思是,安裝vs可以選擇vs17,vs15!網上給出的解決方案都是vs15,我就想嘗試新的哦,所以我就特立獨行,裝了個vs17,要用新的,嘿嘿~
vs17那裡想表達的意思是:勾選Python開發,會發現右邊有三個默認選項,不要修改這個默認選項,點擊安裝即可~

真的好簡單啊,我們安裝完,是不是能夠解決呢?它又跟我們前面運行的python那個命令又有什麼關係呢?
下面一步一步來揭秘吧!
不管是通過pip安裝包,還是在這裡出現的這個error沒有發現這個.bat文件,問題都是表示distutils無法找到vcvarsall.bat腳本~
這個腳本作用是來設置編譯環境~
此時我們來打開distutils文件夾裡面的_msvccompiler.py這個文件~
由於我用的是anaconda3,所以這裡我給出我的路徑,如果你跟我的不同,可以直接search一下,有什麼問題可以留言給我~
我的路徑:D:Anaconda3Libdistutils_msvccompiler.py

打開後,我們定位到_find_vcvarsall這個方法,這個就是來尋找那個vcvarsall.bat腳本的,也就是在執行這裡的時候報錯了,沒有找到哦。看到了沒有,這裡我們只需要知道一點,那就是這裡是將vs綁定到一塊的,通過vs來找這個.bat文件。那麼我們接下來工作很清楚了,看我們安裝的vs裡面有沒有這個文件不就行了?
看似簡單的問題,實則隱含巨大問題~
為什麼會這麼說呢?
Google了一下這個文件在vs的路徑,找到是在
C:Program Files (x86)Microsoft Visual Studio2017CommunityVCAuxiliaryBuildvcvarsall.bat
結果我進入我的文件夾下,壓根沒有這個Build文件夾,這麼神奇的嗎?
沒有這個文件,肯定會報錯~那麼怎麼搞到這個文件呢,我們就繼續去Google,終於找到了解決問題的辦法:
那就是在安裝的時候,少安裝了一個東東:
那就是沒有勾選使用C++的桌面開發,安裝這個之後,就可以,你再去找就有了,也就成功了~


真的是no zuo,no die,why you try~
總結一下,解決這個問題的方法,那就是直接安裝如下圖的兩個東東就可以了,然後再次運行上面的python setup.py build_ext --inplace
就可以了!
如下圖所示,就是需要安裝的東東:

如下圖為運行後的截圖:

然後重啟jupyter notebook,再次運行就可以了,以後安裝什麼包也就不會出現問題了~
對於這個問題,到這裡就圓滿搞定了!