linux下 python 和 pip 安装换源及虚拟环境管理详解

刚开始使用 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

pyenv方式

转载请标明出处。

posted on 2021-02-06 17:16  进击的davis  阅读(9833)  评论(0编辑  收藏  举报

导航