在樹莓派建立Python虛擬環境
根據筆者接觸 Python 的少少經驗來說,就已經吃了不少虧,都是因為運行的程式版本的差異導致異常,因此為了讓程式能運作正常,建立虛擬環境也就變得是必要的,在樹莓派建虛擬環境並不是用 Anaconda 來建立, 以樹莓派這樣的硬體等級就讓我打消安裝 Anaconda,還是輕量化的安裝就好,沒有必要安裝一堆你用不到的物件。
前置準備
- 樹莓派安裝Raspbian作業系統(Windows篇)
- 樹莓派安裝Jupyter Notebook
- 建立安裝的路徑,之後可能會有多個虛擬環境,所以我們集中在 ~/Documents/envs的這個目錄下。$ cd ~/Documents $ sudo mkdir envs
- 檢視一下建立的目錄與權限
    $ ls -al結果如下 pi@raspberrypi:~/Documents $ ls -al total 12 drwxr-xr-x 3 pi pi 4096 Mar 25 23:01 . drwxr-xr-x 18 pi pi 4096 Mar 25 22:57 .. drwxr-xr-x 2 root root 4096 Mar 25 23:01 envs
開始安裝
- 切換到剛建好的目錄 envs$ cd envs
- 更新 pip$ pip3 install --upgrade pip結果如下 pi@raspberrypi:~/Documents/envs $ pip3 install --upgrade pip Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting pip Downloading https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl (1.4MB) 100% |████████████████████████████████| 1.4MB 257kB/s Installing collected packages: pip Successfully installed pip-20.0.2
- 檢查是否有 virtualenv程式$ pip3 list結果如下 pi@raspberrypi:~/Documents/envs $ pip3 list WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip. Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue. To avoid this problem you can invoke Python with '-m pip' instead of running pip directly. Package Version ----------------- ----------- appdirs 1.4.3 ... 以下省略 urllib3 1.24.1 wcwidth 0.1.7 webencodings 0.5.1 Werkzeug 0.14.1 wheel 0.32.3 wrapt 1.10.11
- 失敗安裝 virtualenv程式,若上述有看過該程式則可以略過此步驟。$ pip3 install virtualenv筆者一開始沒有用系統管理員 sudo去建立,結果就出現了WARNING,之後導致無法建立虛擬環境,所以一定要用 系統管理員sudo建立。 結果如下pi@raspberrypi:~/Documents/envs $ pip3 install virtualenv WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip. ...以下省略 WARNING: The script virtualenv is installed in '/home/pi/.local/bin' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. Successfully installed distlib-0.3.0 filelock-3.0.12 importlib-metadata-1.5.0 virtualenv-20.0.14 zipp-3.1.0這時你用 pip3 list檢查會發現virtualenv是存在的,但是執行時會無法建立,會出現下列錯誤。pi@raspberrypi:~/Documents/envs $ virtualenv dsalearning bash: virtualenv: command not found
- 正確安裝 virtualenv程式,若上述沒有看到WARNING,可能你的環境變數已有加了該路徑了吧,正常者可以略過此步驟。$ sudo pip3 install virtualenv結果如下 pi@raspberrypi:~/Documents/envs $ sudo pip3 install virtualenv Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting virtualenv ...以下省略 Successfully installed distlib-0.3.0 filelock-3.0.12 importlib-metadata-1.5.0 virtualenv-20.0.14 zipp-3.1.0耶!沒有看到 WARNING了,來建立虛擬環境吧。$ sudo virtualenv dsalearning結果如下 pi@raspberrypi:~/Documents/envs $ sudo virtualenv dsalearning created virtual environment CPython3.7.3.final.0-32 in 407ms creator CPython3Posix(dest=/home/pi/Documents/envs/dsalearning, clear=False, global=False) seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1) activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
變更權限
- 檢查虛擬環境目錄
    $ ls -al結果如下 pi@raspberrypi:~/Documents/envs $ ls -al total 12 drwxr-xr-x 3 root root 4096 Mar 26 00:18 . drwxr-xr-x 3 pi pi 4096 Mar 25 23:01 .. drwxr-xr-x 4 root root 4096 Mar 26 00:18 dsalearning發現虛擬環境的目錄權限是 root而不是pi,這個會影響之後用pi帳號在虛擬環境安裝其它package時會有問題,因此需要將此虛擬環境的目錄權限變更為pi
- 變更目錄權限 
 $ sudo chown -R pi:pi dsalearning
- 檢查目錄是否變更
    $ ls -al結果如下 pi@raspberrypi:~/Documents/envs $ ls -al total 12 drwxr-xr-x 3 root root 4096 Mar 26 00:18 . drwxr-xr-x 3 pi pi 4096 Mar 25 23:01 .. drwxr-xr-x 4 pi pi 4096 Mar 26 00:18 dsalearning已經從 root變更為pi了。也可以把這個權限變更在envs這個目錄,這樣之後建的虛擬環境目錄都可以用pi帳號建立。
進入虛擬環境
- 切換到 dsalearning目錄$ cd dsalearning
- 進入 dsalearning環境$ source bin/activate結果如下 pi@raspberrypi:~/Documents/envs $ cd dsalearning pi@raspberrypi:~/Documents/envs/dsalearning $ source bin/activate (dsalearning) pi@raspberrypi:~/Documents/envs/dsalearning $這時會看到使用者帳號 pi前多了(dsalearning)就表示已經進入到這個名稱的虛擬環境。
檢查虛擬環境安裝的程式
- 檢查已安裝的程式
    $ pip3 list結果如下 (dsalearning) pi@raspberrypi:~/Documents/envs/dsalearning $ pip3 list Package Version ---------- ------- pip 20.0.2 setuptools 46.1.1 wheel 0.34.2是否發現跟 base未建立之前的差很多,也就是這裡只要安裝你需要的指定版本程式即可。
離開虛擬環境
$ deactivate
刪除虛擬環境
有時測試或建錯都會有需要把虛擬環境刪除已釋放空間,指令如下。
$ sudo rm -r dsalearning/
結果如下
pi@raspberrypi:~/Documents/envs $ ls -al
total 12
drwxr-xr-x 3 root root 4096 Mar 26 00:18 .
drwxr-xr-x 3 pi   pi   4096 Mar 25 23:01 ..
drwxr-xr-x 4 pi   pi   4096 Mar 26 00:18 dsalearning
pi@raspberrypi:~/Documents/envs $ sudo rm -r dsalearning/
pi@raspberrypi:~/Documents/envs $ ls -al
total 8
drwxr-xr-x 2 root root 4096 Mar 26 23:05 .
drwxr-xr-x 3 pi   pi   4096 Mar 25 23:01 ..
筆者習慣都要先檢查過才刪除。
心得
就是走過了上述失敗的過程,才知道用 sudo 來安裝,且必需把權限再授予 pi ,否則權限不夠。
 
       
       
       
      
留言