剛開始使用 linux 的時候踩過不少關於 python 安裝的坑,不管是安裝 python 還是安裝 pip,又或是 pip install,本篇博文旨在對 python & pip 相關做個總結,方便其他 coder 查閱,另外也是做個記錄,方便以后查閱。
本篇博文將從 python 的安裝,pip 換源,虛擬環境管理的角度逐步展開,有誤之處望指正。
python 安裝
以 ubuntu 18.04版本為例。
ubuntu 默認安裝有 python2.7,python3.6,如果我們有需求安裝其他版本的 python 呢,比如 python3.7/3.8/3.9,通常我們不必卸載預安裝的python版本,因為刪除的話,有些影響你沒法預料,我曾經刪了內置版本的后,系統廢了,不得不換環境。
如果安裝其他版本的 python,我們可以從以下途徑下載 python tar 包,官網或者其他國內的鏡像源,官網的下載慢,推薦下載國內鏡像源,比如阿里雲上的 python,下載速度也很快。
下面開始安裝流程。
1.下載安裝包
# cd 到下載目錄
# 下載安裝包
# wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz
# 解壓安裝包
# tar -xf Python-3.7.6.tar.xz
2.編譯安裝
如果不做安裝設置,python會默認安裝,本文指定路徑安裝,覺得麻煩的coder可以略過目錄指定。
#創建編譯安裝目錄
# mkdir /usr/local/python-3.7.6
# 進入解壓后的python文件中
# cd Python-3.7.6
# 指定安裝配置
# ./configure --prefix=/usr/local/python3.7.6 --with-ssl
# 默認安裝路徑,可不加參數
# 如提示缺少c編譯器,install -y gcc即可
# 編譯
# make && make install
到這里,其實python3.7版本已經安裝好了。
但往往我們可能又有其他需求,比如shell中敲python,或者python3,我們希望直接就是python3.7的編譯環境,有種辦法解決,創建軟連接。
以python3為例:
3.創建軟連接
首先要知道,軟連接其實相當於windows下的快捷方式,暫且這樣理解吧。其次,要知道對應的python3,python3.7命令在哪里。
# 找到python3的命令位置
# which python3
# 返回:/usr/bin/python3
# 先刪除此軟連接
# rm -f /usr/bin/python3
# 剛剛安裝的python3.7的位置
# /usr/local/python-3.7.6/bin/python3.7
# 創建軟連接,ln命令的使用
# ln -s /usr/local/python-3.7.6/bin/python3.7 /usr/bin/python3
# ln命令格式: ln -s source dest
-s 軟連接
/usr/local/python-3.7.6/bin/python3.7 source 源
/usr/local/bin/python3 dest
如果是centOS(centos7為例),安裝 python 前要注意以下:
安裝編譯環境
yum -y groupinstall "Development tools"
yum install gcc patch libffi-devel python3-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
yum install libffi-devel -y
pip的安裝
不管是ubuntu還是centos,都是默認沒有安裝pip的,如果自己安裝了python3,則有pip3。
1.安裝pip
# ubuntu 18.04
# apt-get install python-pip
# centos7
# yum install -y python-pip
# 如果安裝失敗,先更新下update,如ubuntu系統,可以執行以下命令:
# apt-get update
此時的pip,其實默認指向python2的,以python3的為例吧。
2.創建軟連接
剛剛也提到了,linux默認沒有pip的,所以我們可以直接創建軟連接
# ln -s /usr/local/python-3.7.6/bin/pip3 /usr/local/bin/pip3
3.換源
由於pip默認從官網下載安裝包,server又不在境內,訪問速度慢,國內有很多鏡像源供選擇,速度也很快,穩定。
如果root用戶和其他用戶都會使用的話,建議在/root/和/home/username/下都做個換源設置,root下pip install 用的是/root/下的鏡像源,同理其他用戶是/home/username/下的。
# 1.創建配置文件-root下或其他用戶下
root用戶的
# mkdir /root/.pip
# cd /root/.pip
# touch pip.conf | echo > pip.conf
# 2.編輯配置文件
# vim pip.conf
---分割線---
阿里源:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
disable-pip-version-check = true #取消pip版本檢查,排除每次都報最新的pip,非必須
[install]
trusted-host=mirrors.aliyun.com
---分割線---
# 在[install]設置:install_lib = ~/usr/lib/pythonxxx/site-packages,可以指定pip安裝包路徑
國內源:
阿里雲 http://mirrors.aliyun.com/pypi/simple/
中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/
中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/
其他用戶,類似,只是 .pip文件夾位置不一樣,在用戶的家目錄下即可
虛擬環境配置
通過前面的操作,我們已經安裝了python,也可以pip 安裝包,如果有不同python版本的運行需求,我們就可以通過虛擬環境來切換不同版本的python,很方便的。
1.安裝虛擬環境包
pip install virtualenv
pip install virtualenvwrapper
2.配置文件-環境變量
此處以一般用戶的家目錄為例,可先創建.virtualenvs文件夾。
# 1.編輯配置文件 ~/.bashrc
# 加入以下內容
---分割線---
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source ~/.local/bin/virtualenvwrapper.sh
---分割線---
# 注意:ubuntu 17.04后,安裝virtualenvwrapper后,
# virtualenvwrapper.sh在 ~/.local/bin下,一般在/usr/local/bin下,按實際位置配置source
# 2.保存后,刷新環境變量,針對當前用戶有效,如要全局設置,可在 /etc/profile 或 /etc/environment 中設置PATH
# source ~/.bashrc
3.不同虛擬環境的管理
我們可以通過鏈接不同的python版本,創建不同版本的python虛擬環境,主要需求是同個python版本,但安裝包的版本不一樣。
virtulaenv方式
# 1.創建並激活虛擬環境 : mkvirtualenv 虛擬環境名稱 (默認創建python2.7)
e.g. mkvirtualenv py27
# 創建的虛擬環境會在 ~/.virtualenvs 下
# 2.創建指定語言版本的虛擬環境
mkvirtualenv -p python語言版本的路徑 虛擬環境的名稱
mkvirtualenv -p /usr/bin/python3.5 虛擬環境的名稱
e.g. mkvirtualenv -p /usr/bin/python3 py35
# 先前已經創建軟連接,python3 >>> python3.7.6
# 3.退出虛擬環境 : deactivate
# 4.進入某虛擬環境: workon 虛擬環境名稱 (該虛擬環境必須存在)
e.g. workon py27
# 5.刪除虛擬環境:rmvirtualenv 虛擬環境名稱
e.g. rmvirtualenv py27
# 6.列出所有環境:workon 或者 lsvirtualenv -b
# 7.重命名虛擬環境名 因為沒有mv相關命令,但可以通過 cp && rm 操作完成
cpvirtualenv oldname newname
rmvirtualname oldname
pyvenv
pyvenv
是python3自帶的虛擬環境工具,通過這個也可以輕松實現虛擬環境的安裝。
接下來直接說使用吧。
# 使用以下命令即可直接創建基於同python版本的虛擬環境
pyvenv ENV_NAME
舉個例子,我剛安裝python3.7,進入python3.7的安裝目錄:
# 查看python3.7路徑
# whereis python3.7
python3: /usr/bin/python3.6 /usr/bin/python3.6m /usr/bin/python3.6-config
/usr/bin/python3.6m-config /usr/bin/python3.6m-x86_64-config /usr/bin/python3
/usr/lib/python3.6 /usr/lib64/python3.6 /usr/include/python3.6m /usr/local/python3.7
/usr/local/python3.7/bin/python3.7m /usr/local/python3.7/bin/python3.7
/usr/local/python3.7/bin/python3.7m-config /usr/local/python3.7/bin/python3
/usr/local/python3.7/bin/python3.7-config /usr/share/man/man1/python3.1.gz
# 進入python3.7路徑
# cd /usr/local/python37
# 列出文件
# ls
# 進入bin目錄,並列出有哪些文件
# cd bin;ls
2to3 2to3-3.7 django-admin django-admin.py easy_install-3.7
idle3 idle3.7 pip3 pip3.7 __pycache__ pydoc3 pydoc3.7 python3
python3.7 python3.7-config python3.7m python3.7m-config python3-config
pyvenv pyvenv-3.7 uwsgi
# 使用pyvenv之前,確保環境變量已添加
# 基於python3.7版本,另外生成3.7的虛擬環境
# pyvenv py37test
WARNING: the pyenv script is deprecated in favour of `python3.7 -m venv`
# cd py37test/
# ls
bin include lib lib64 pyvenv.cfg
# 可以看到另外的python3.7
# cd bin;ls
activate activate.csh activate.fish easy_install easy_install-3.7 pip pip3 pip3.7 python python3 python3.7
使用虛擬環境:
# 結合自己的path激活
# source env/bin/activate
# 退出
# deactivate
為了以后使用方便,建議加入環境變量中。具體見博文: linux系統修改環境變量-export
使用anaconda管理虛擬環境
# 創建虛擬環境
conda create xxx -n envName
# 激活某虛擬環境
conda activate envName
# 退出某虛擬環境
conda deactivate envName
3.1 創建虛擬環境
conda create -n env_name python=version package_names
其中,參數-n是指接下來的參數指定虛擬環境名,與--name等效,所以python36即為指定的將要創建的虛擬環境名。python=version是為虛擬環境指定Python版本,指定版本后,conda會安裝該版本下最新的子版本,例如指定版本為3.6時,conda將會安裝最新的3.6.x版本。package_names是要為新的虛擬環境創建時就安裝的包,這里也可以不安裝其他包,省略這一參數,在后續使用虛擬環境時安裝第三方包。
例:創建一個虛擬環境,Python版本為3.6,虛擬環境名為python36
conda create --name python36 python=3.6
3.2 查看虛擬環境
conda env list
運行后,結果如下:
# conda environments:
#
base * /home/chb/anaconda3
python36 /home/chb/anaconda3/envs/python36
上述結果列出了當前系統中所有conda創建的虛擬環境,即環境所在目錄。base是安裝anaconda時指定安裝的Python環境。型號(*)是指系統當前說還是用的Python環境。
3.3 激活虛擬環境
conda activate env_name
例如:進入剛剛創建的虛擬環境python36
conda activate python36
如果進入到虛擬環境python36,之后的命令行抬頭都會有一個“(python36)”的字樣。
3.4 退出虛擬環境
退出虛擬環境時並不需要指定虛擬環境名,直接運行下行命令即可:
conda deactivate
3.5 共享虛擬環境
什么是共享虛擬環境呢?當我們在本機上開發了一套代碼,然后將代碼上傳到github或者發給項目組其他人,這是別人可不知道我們開發的代碼上面用到了哪些依賴,conda提供了方便得功能將虛擬環境中所有依賴包統一導出一個配置文件中,在別的機器上使用這套代碼時,根據conda導出的配置文件重建虛擬環境即可,這就是共享虛擬環境功能。在多人協作開發及開源的情況下,共享虛擬環境無疑是一個非常實用的功能。
先來導出依賴到配置文件:
conda env export --file python36_env.yml
environment.yaml是導出依賴的目標文件,運行命令后,當前目錄下就回生成一個environment.yaml文件,包含了所有依賴信息。
根據配置文件創建虛擬環境:
conda env create -f /home/chb/code/python36_env.yml
運行上述命令后,在新機器上也會創建一個一模一樣的虛擬環境。
3.6 刪除虛擬環境
conda remove -n python36 --all
或者
conda env remove -n python36
4 包管理
4.1 安裝包
conda install package_name
或者
pip install package_name
4.2 列出所有包
conda list
4.3 更新包
conda update package_name
如果想要一次性更新所有包:
conda update --all
4.4 查找包
conda search keyword
例如:我們要安裝pandas,但是忘了准確名稱,可以這樣查找:
conda search pan
4.5 刪除包
conda remove package_name
轉載請標明出處。