python3在科學計算、深度學習等領域已經大行其道,python2也即將在2023年後逐漸退出歷史舞台。但是,在樹莓派上,很多軟體依然依賴於python2,我們甚至不能將python預設版本設定為python3版本,否則在實際使用過程中可能面臨諸多不必要的麻煩。在樹莓派環境下,如果需要用到python3,還是建議大家使用python虛擬環境。
樹莓派上安裝了python2.7及python3.5(raspbian stretch 9.3),且預設使用python2(即python是指向python2.7的)。
如果沒有安裝,可以使用以下方法安裝:
1. 安裝python
# 安裝python(指向python2)
sudo apt-get install python-dev
# 安裝python3
sudo apt-get install python3-dev
2. 調整python命令指向
技術層面上,我們可以在樹莓派上將python命令指向python3:
sudo ln -s /usr/bin/python3.5 /usr/bin/python
但是,實際使用中,目前為止我還是不推薦這樣的改動。因為在實踐中我遇到了很多由此引起的不必要的問題。
我的建議是,要使用python3時,使用python3命令,或者使用虛擬環境。
1. pip安裝
一般來說python2和python3也都是各自安裝有pip模組的。如果沒有安裝,可以使用以下方法安裝:
首推使用官方pip安裝指令碼安裝,可以安裝最新版本的pip,獲得更好的體驗。
# 【薦】使用官方pip安裝指令碼安裝(安裝在python2的site-packages下)、安裝pip3(安裝在python3的site-packages下)
curl -o get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py
# 使用apt-get安裝pip(安裝在python2的dist-packages下)、安裝pip3(安裝在python3的dist-packages下)
sudo apt-get install python-pip
sudo apt-get install python3-pip
# 使用easy_install模組安裝pip(安裝在python2的dist-packages下)、安裝pip3(安裝在python3的dist-packages下)
sudo python -m easy_install pip
sudo python3 -m easy_install pip
【注】:apt-get安裝或者easy_install,包括後面用pip安裝模組都會安裝在python的dist-packages目錄下,只有從原始碼安裝才會安裝在site-packages下。
2. pip公升級
可以用以下方法公升級pip:
pip install --upgrade pip
或pip install -u pip
或python -m pip install --upgrade pip
或python -m pip install -u pip
或easy_install --upgrade pip
3. 呼叫pip
pip實際上是依賴於python環境的乙個包,因此在使用pip安裝模組時,究竟由哪個python環境呼叫就決定了模組被安裝到了什麼位置。
我們先來檢視一下pip命令指向的python直譯器:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.ar**[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.ar**[0])
sys.exit(main())
因此可以確定,這種情況下直接呼叫pip命令的話,會把包安裝到python2的環境下。
再看一下pip3命令:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.ar**[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.ar**[0])
sys.exit(main())
與調整python命令指向類似,同樣可以在技術層面上使pip命令預設指向python3環境下的pip模組,但是我不建議。
sudo nano /usr/local/bin/pip【具體位置可以用which pip查詢,可能與此不同】
將第一句由#!/usr/bin/python2修改為#!/usr/bin/python3
除了直接使用pip/pip3命令外,直接用python -m/python3 -m命令呼叫pip/pip3更為準確,雖然可能麻煩了一些:
python -m pip install ***
python3 -m pip install ***
很多人在用到pip時,都是上來就是一頓pip install操作,對pip沒有乙個基本了解,以至於出現各種問題,例如安裝慢、沒有許可權等。
1. 配置檔案
linux環境下,pip配置檔案的位置可能為:
虛擬環境級別:$virtual_env/pip.conf
使用者級別: ~/.pip/pip.conf 或者 ~/.config/pip/pip.conf(兩者同時存在時,前者優先順序最高)。
global級別:/etc/pip.conf
可以用pip config檢視當前的配置:
# 列舉當前配置
pip config list
# 列舉虛擬環境級別的配置
pip config --site list
# 列舉使用者級別的配置
pip config --user list
# 列舉系統級別的配置
pip config --global list
2. 配置引數
配置檔案中包含多個section,每個section包含用框起來[section header],以及具體的配置選項和引數。
section header來自於pip命令列的命令(如install, freeze等),以及乙個[global]用於設定全域性引數。
【note1】[global]下設定的引數可以在具體的section header下面再做自定義配置,pip將以具體的section header下的配置為準,例如:
[global]
index-url =
[install]
index-url=
則index-url=才是生效的。
【note2】前述了三個級別的配置檔案,當三個級別的配置檔案同時存在時,配置都會被載入進來,但是當配置選項存在衝突時,優先順序虛擬環境級別(虛擬環境被啟用)>使用者級別》系統級別(需要許可權)。
3. 示例:映象源配置
[install]
index-url=
# 表示信任mirrors.aliyun.com
trusted-host=mirrors.aliyun.com
囉嗦一句,映象源的配置可以放在user級別的配置檔案中,避免每個虛擬環境都要配置,但也不必放在系統級別(需要許可權)。雖然很多時候,我們可能都掌握著這個許可權,但我的建議是,如果你不是個管理員,不懂得如何管理的話,還是把東西都放在user級別就可以了。
pip沒有做好安裝位置選擇時,比較容易出問題,如許可權問題、安裝位置混亂等。前面有提及site-packages和dist-packages的區別,但這裡我們配置安裝位置不需要精確到這兩個目錄,只需定位到lib的上一級目錄即可,例如
系統級別:/usr/local/lib/
使用者級別:~/.local/
虛擬環境級別:~/.virtualenvs/venv_name/
在給sudo許可權的情況下,預設安裝到系統級別,安裝在系統級別下的包所有使用者都可以訪問;
加上–user引數時,預設安裝至使用者級別目錄;
在虛擬環境下,就會安裝到虛擬環境級別目錄。
安裝位置也可以在配置檔案中設定,例如:
[install]
prefix=~/.virtualenvs/venv_name/
若非必要,建議不要自行配置安裝位置,配置不好反而適得其反。啥時候必要呢?有的時候一些包會預設安裝到系統級別,那麼就會出現permission denied,可以嘗試自定義prefix來解決這個問題。 在樹莓派上用python控制LED
初步學習rpi.gpio模組的過程中寫了乙個控制8個led的模組,基本上只是乙個對rpi.gpio的乙個封裝 電路圖 按照電路圖所示,在麵包板上進行連線。安裝rpi.gpio 首先得確定rpi.gpio已安裝。最新的系統已經自帶了,如果沒有的可以使用命令 sudo apt get update su...
在樹莓派上用python控制LED
初步學習rpi.gpio模組的過程中寫了乙個控制8個led的模組,基本上只是乙個對rpi.gpio的乙個封裝 電路圖按照電路圖所示,在麵包板上進行連線。首先得確定rpi.gpio已安裝。最新的系統已經自帶了,如果沒有的可以使用命令 shell 1 2 sudo apt getupdate sudo ...
樹莓派上編譯安裝python3 6
1 sudo apt get update 2 sudo apt get upgrade y 1sudo apt get install build essential libsqlite3 dev sqlite3 bzip2 libbz2 dev 1 wget 2 tar zxvf python ...