樹莓派上多版本python及pip安裝使用管理指南

2021-09-24 11:34:15 字數 4552 閱讀 9031

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 ...