好久沒更新博客了,每天還是踩坑中。今天遇到第一個問題“ImportError: No module named 'secrets'”,導包是常見問題。這次的問題導致我又重裝了一次環境,不過這是一個新服務器。
首先,分析下這個secrets庫。它是一個標準庫,要求是python版本>=Python3.6。那麼開始升級Python:
第一種方法:
使用Ubuntu的PPA(Personal Package Archives個人軟件包存檔),實質是更改source.list進行軟件的更新。這個方式第一次嘗試,比較之前的升級方式簡便,只需3步(ps:我沒成功,看下面也許你會成功)。那就開始嘗試了。
1)添加倉庫
sudo add-apt-repository ppa:jonathonf/python-3.6
# 若添加失敗 sudo apt-get install python-software-properties sudo apt-get install software-properties-common
2)更新軟件源list
sudo apt-get update
# 若出現E: Failed to fetch http://ppa.launchpad.net/..... E: Some index files failed to download. They have been ignored, or old ones used instead # 手動更新source.list sudo vi /etc/apt/sources.list # 檢查下有沒有ppa,有的話註釋掉那一行;沒有的話,加上下面的這一行 deb http://ppa.launchpad.net/q-quark/equalx/ubuntu xenial main # 當然更新源列表的時候很快,可能沒注意這幾行報錯,接着下一步安裝Python3.6也會報其他錯
3)安裝Python3.6
sudo apt-get install python3.6 # 若報錯E: Unable to locate package python3.6 # E: Couldn't find any package by glob 'python3.6' # E: Couldn't find any package by regex 'python3.6' # 當然,這是上一步更新軟列表沒有成功 # 到這了,是否該放棄這種方法呢?找到了ppa的一個傳送門:https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
第二種方法:
使用老方法,下載安裝包,編譯。
1)安裝一些依賴包
sudo apt-get install -y wget sudo apt-get install make sudo apt-get install -y gcc sudo wget http://www.zlib.net/zlib-1.2.11.tar.gz sudo tar -xzvf zlib-1.2.11.tar.gz cd zlib-1.2.11 sudo ./configure sudo make all sudo make install cd .. sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get install -y build-essential python-dev python-setuptools python-pip python-smbus sudo apt-get install -y build-essential libncursesw5-dev libgdbm-dev libc6-dev sudo apt-get install -y zlib1g-dev libsqlite3-dev tk-dev sudo apt-get install -y libssl-dev openssl sudo apt-get install libffi-dev
2)安裝Python3.6
sudo wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz sudo tar -xzvf Python-3.6.5.tgz cd Python-3.6.5 sudo ./configure sudo make all sudo make install
3)創建軟鏈
# 移除舊的軟鏈 sudo rm -rf /usr/bin/python3 sudo rm -rf /usr/bin/pip3 # 創建新的,因爲安裝的時候沒有指定安裝路徑,默認安裝到/usr/local/bin/ sudo ln -s /usr/local//bin/python3.6 /usr/bin/python3 sudo ln -s /usr/local/bin/pip3.6 /usr/bin/pip3 # 驗證指向是否是python3.6 python3 -V pip3 -V
lsb_release問題:
裝virtualenv後,進入沙盒環境pip list(ps:沙盒環境就不需要再pip3,pip即可),報了另外個問題:subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.
# 更改該文件的shebang sudo vi /usr/bin/lsb_release # 第一行#!/usr/bin/python3 -Es 更改爲#!/usr/bin/python3.6 -Es
# 再次pip list成功
奶思~