你踩過這個坑?

  • 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,再次運行就可以了,以後安裝什麼包也就不會出現問題了~

對於這個問題,到這裡就圓滿搞定了!