目录
1. 编译安装 Python (venv/virtualenv/virtualenvwrapper/conda)
在 CentOS 上因为自带的 Python 版本比较旧, 所以要安装高版本的 Python 但同时要求不能影响原来的 python3
命令。
非常不建议直接覆盖当前系统的 python
和 python3
命令, Python 每个版本之间多少有点不兼容问题, 处理起来非常麻烦, 万一系统用到了, 就是个大问题。
Building Python:
make install
can overwrite or masquerade thepython3
binary.make altinstall
is therefore recommended instead ofmake install
since it only installsexec_prefix/bin/pythonversion
.
If you want it to install to, for example, /usr/bin
instead of the default (/usr/local/bin
in ubuntu/debian), then instead of ./configure
, type ./configure --prefix=/usr
when told to use it in the guide.
For in your $HOME/bin
directory, use --prefix=$HOME
.
If it doesn’t exist, add $HOME/bin
to your $PATH like this:
$ export PATH=$HOME/bin:$PATH
This may already be in your .bashrc
in ubuntu, and others. If it is, when you next log in, $HOME/bin
will be added to your $PATH
automatically.
1.1. altinstall bininstall maninstall
Let’s take a look at the generated Makefile!
First, the install target:
install: altinstall bininstall maninstall
It does everything altinstall
does, along with bininstall
and maninstall
Here’s bininstall
; it just creates the python
and other symbolic links.
# Install the interpreter by creating a symlink chain:
# $(PYTHON) -> python2 -> python$(VERSION))
# Also create equivalent chains for other installed files
bininstall: altbininstall
-if test -f $(DESTDIR)$(BINDIR)/$(PYTHON) -o -h $(DESTDIR)$(BINDIR)/$(PYTHON); \
then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON); \
else true; \
fi
(cd $(DESTDIR)$(BINDIR); $(LN) -s python2$(EXE) $(PYTHON))
-rm -f $(DESTDIR)$(BINDIR)/python2$(EXE)
(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python2$(EXE))
... (More links created)
And here’s maninstall
, it just creates “unversioned” links to the Python manual pages.
# Install the unversioned manual pages
maninstall: altmaninstall
-rm -f $(DESTDIR)$(MANDIR)/man1/python2.1
(cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python$(VERSION).1 python2.1)
-rm -f $(DESTDIR)$(MANDIR)/man1/python.1
(cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python2.1 python.1)
TLDR: altinstall
skips creating the python
link and the manual pages links, install
will hide the system binaries and manual pages.
1.2. 兼容性修正
1.2.1. Redhat/CentOS 系
一般在 /usr/bin/
下放一个链接, 链接到 /usr/local/bin/
下面:
$ ln -s /usr/local/bin/pip /usr/bin/pip
$ ln -s /usr/local/bin/pip3 /usr/bin/pip3
$ ln -s /usr/local/bin/pip3.9 /usr/local/bin/pip3
1.2.2. Debian/Ubuntu 系
1.3. 快速虚拟化环境工具
1.4. Step 1: Install Python Dependencies
Login to your CentOS 8 / CentOS 7 system as root or user with sudo privileges.
Then do system update
sudo yum -y install epel-release
sudo yum -y update
Reboot after the upgrade before you continue to install dependencies
sudo reboot
Install required software development tools required to build Python 3.9 on CentOS 8 / CentOS 7:
sudo yum groupinstall "Development Tools" -y
sudo yum install openssl-devel libffi-devel bzip2-devel -y
Confirm gcc
is available:
$ gcc --version
gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1.5. Step 2: Download latest Python 3.9 Archive
Ensure wget
is installed:
sudo yum install wget -y
Use wget to download the latest Python 3.9 release.
wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz
Extract the archive file using tar:
tar xvf Python-3.9.10.tgz
Switch to the directory created from the file extraction:
cd Python-3.9*/
1.6. Step 3: Install Python 3.9 on CentOS 8 / CentOS 7
Run the command below to configure Python installation.
./configure --enable-optimizations
Build Python 3.9 on CentOS 8 / CentOS 7:
sudo make altinstall # altinstall is important, DO NOT use `make install`.
Python 安装时
make install
和make altinstall
的区别: altinstall skips creating the python link and the manual pages links.altinstall
跳过创建 Python 链接和手册页链接的操作。如果使用make install
, 在系统中将会有两个不同版本的 Python 在/usr/bin
目录中, 这将会导致很多问题。
Be patient as this takes quite some time depending on number of CPU cores in your system.
Check Python 3.9 installation on CentOS 8 / CentOS 7. Run below command to confirm successful installation of Python 3.9 on CentOS 8 / CentOS 7:
$ python3.9 --version
Python 3.9.10
Pip3.9 must have been installed as well:
$ pip3.9 --version
pip 21.2.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
Upgrade pip
$ /usr/local/bin/python3.9 -m pip install --upgrade pip
$ pip3.9 --version
2. 什么是 virtualenv?
virtualenv 可以创建独立 Python 开发环境, 比如当前的全局开发环境是 python3.6, 现在我们有一个项目需要使用 django1.3, 另一个项目需要使用 django1.9, 这个时候就可以使用 virtualenv 创建各自的 python 开发环境了。
2.1. virtualenv 的优点
- 使不同的应用开发环境独立
- 环境升级不影响其他的应用, 也不会影响全局的 python 开发环境
- 它可以防止系统中出现包管理混乱和版本的冲突
2.2. 安装和新建虚拟环境
cmd 下输入: 前提是你的 python 安装路径已经被添加到环境变量中
C:\>pip install virtualenv
2.3. 新建虚拟环境:
C:\>virtualenv testenv
Using base prefix 'c:\\python36'
New python executable in C:\testenv\Scripts\python.exe // 默认安装在当前目录下
Installing setuptools, pip, wheel...done.
可以在当前目录下看一下:
2.4. 激活和关闭当前的虚拟环境
C:\testenv\Scripts>activate // 激活
(testenv) C:\testenv\Scripts> // 注意终端发生了变化
(testenv) C:\testenv\Scripts>deactivate // 关闭当前虚拟环境
C:\testenv\Scripts>
2.5. 列出当前的虚拟环境都安装了哪些包
(testenv) c:\testenv\Scripts>pip3 list
pip (9.0.1)
setuptools (37.0.0)
wheel (0.30.0)
现在你就可以在你创建的虚拟环境下安装需要使用到的包了
3. virtualenvwrapper
鉴于 virtualenv 不便于对虚拟环境集中管理, 所以推荐直接使用 virtualenvwrapper。 virtualenvwrapper 提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。
3.1. 安装 virtualenvwrapper(确保 virtualenv 已安装)
pip install virtualenvwrapper
pip install virtualenvwrapper-win #Windows 使用该命令
安装完成后, 在 ~/.bashrc
写入以下内容
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
- 第一行: virtualenvwrapper 存放虚拟环境目录
- 第二行: virtrualenvwrapper 会安装到 python 的
bin
目录下, 所以该路径是python
安装目录下bin/virtualenvwrapper.sh
source ~/.bashrc # 读入配置文件, 立即生效
3.2. virtualenvwrapper 基本使用
- 创建虚拟环境 mkvirtualenv
mkvirtualenv venv
这样会在 WORKON_HOME
变量指定的目录下新建名为 venv
的虚拟环境。
若想指定 python 版本, 可通过 --python
指定 python 解释器
mkvirtualenv --python=/usr/local/python3.5.3/bin/python venv
- 基本命令
- 查看当前的虚拟环境目录
[root@localhost ~]# workon
py2
py3
- 切换到虚拟环境
[root@localhost ~]# workon py3
(py3) [root@localhost ~]#
- 退出虚拟环境
(py3) [root@localhost ~]# deactivate
[root@localhost ~]#
- 删除虚拟环境
rmvirtualenv venv
4. python 虚拟环境管理工具 venv 教程
4.1. 概述
Python 有各种各样的系统包和第三方开发的包, 让我们的开发变得异常容易。不过也引入了一个问题, 不同代码需要的包版本可能是不一样的, 所以常常回出现这种情况, 为了代码 B 修改了依赖包的版本, 代码 B 能 work 了, 之前使用的代码 A 就没法正常工作了。因此常常需要对不同的代码设置不同的 Python 虚拟环境。venv 是 Python 自带的虚拟环境管理工具, 使用很方便, 这里简单记录一下使用方法。
需要注意的是, venv 工具没法创建不同版本的 python 环境, 也就是如果你用 python3.5 没法创建 python3.6 的虚拟环境。如果想要使用不同 python 版本的虚拟环境, 请安装 virtual env 包。
如果遇到使用问题, 还请参考 venv 官方文档。
4.2. 安装 venv
python3.6 及以上已经默认安装, python3.5 需要通过系统的包管理工具安装, 例如在 Ubuntu 上, 可以这么安装:
sudo apt install python3-venv
4.3. 创建虚拟环境
假设我们要在当前目录的 test_env
目录下创建虚拟环境, 那么执行下面的命令就可以了:
python3 -m venv test_env
4.4. 启用虚拟环境
在 Linux 和 Mac 环境下, 打开终端, 执行下面的命令:
source ./test_env/bin/activate
在 Windows 环境下, 打开 PowerShell, 执行下面的命令:
.\test_env\Scripts\Activate.ps1
可以看到, 命令行的提示符前面会出现括号, 里面是虚拟环境名称。
4.5. 安装包
虚拟环境启用后, 就可以使用 pip
命令来安装需要的包:
pip install easydict
注意这里不需要 root 权限, 因此无需添加 sudo
。
在 Linux 和 Mac 系统上, 安装的包放在。/test_env/lib/pythonx.x/site-packages
目录下, 在 Windows 系统上, 是在。/test_env/Lib/site-packages
目录下。
4.6. 使用包
安装后, 可以在命令行执行 python
命令, 进入 Python 交互式环境, 然后 import
安装的包, 如果不报错, 就说明安装成功了
python
Python 3.9.6 (default, Sep 26 2022, 11:37:49)
[Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import easydict
>>>
或者也可以用一条命令 python -c "import <package-name>
来验证是否安装, 没有报错就说明安装成功
然后就可以编写你的 Python 代码了, 写完后用 python my-code.py
来执行 Python 代码。
4.7. 退出虚拟环境
退出虚拟的 python 环境, 在命令行执行下面的命令即可:
deactivate
5. conda
5.1. conda 和 virtualenv 的区别
两者都是 python 的虚拟运行环境, 不一样的是
virtualenv: 如果你本地安装的 python 版本是 3.5, 那么创建出来的虚拟环境均是基于 3.5 版本的空的 python 环境
conda: 更强大, 在创建虚拟环境的时候, 可以选择用 python 的哪个版本, 如用 3.5 还是 3.6。由于不同版本 python 环境间还是有些不同的, 所以有时我们是需要创建出版本的 python 环境的, conda 就可以做到。
5.2. anaconda 和 miniconda 的区别
都是 conda, 大家可以理解为一个是完整安装, 一个是最小化安装
anaconda: 安装好后, 会安装很多个库, 占用空间大一些
miniconda: 是 conda 的一个最小化安装, 只会安装 conda, python 及一些常用的包, 如 pip, zlib 等, 可以用 conda install 命令安装其他包,
除此之外, 两者的命令都一样, 没有什么不同