Python环境管理
产生想要管理python环境的由来
本人使用的是Arch系的系统做为主力系统,一切使用都正常,但在一次 sudo pacman -Syu
更新后,发现创建的python丢失了,于是就查了一下,虚拟环境会收系统中的python影响,更新了系统中的 Python 版本,导致现有虚拟环境与新的 Python 版本不兼容,还有一种就是python的路径发生改变了导致,但通常更新是不会修改路径的,所有大多是更新python导致的。于是就有了管理python环境的想法。
也算是踩坑了吧,在 arch 这类滚动更新的系统中就会有各类不同的问题出现,但这又何尝不是一种锻炼呢,不故步自封,时常出现一些问题,然后解决问题,这也是一种学习。
在这次python环境的丢失中,我也了解到了使用 python -m venv venvname
创建的虚拟环境,相当于只是将系统的python环境创建了软链接,若系统的python环境出现变动,创建的虚拟环境就会出问题。
pyenv
和 virtualenv
pyenv
和 virtualenv
是两个不同的工具,各自有不同的功能和用途,尽管它们可以一起使用来管理 Python 环境。以下是它们的区别和各自的功能:
pyenv
-
功能:
- Python 版本管理:
pyenv
主要用于管理多个 Python 版本。它可以让你在同一台机器上安装和切换多个版本的 Python。 - 版本隔离:允许你在项目级别指定 Python 版本,这样不同的项目可以使用不同的 Python 版本而不会互相干扰。
- 与系统独立:
pyenv
安装的 Python 版本与系统的 Python 独立,因此不会影响系统的 Python 配置。
- Python 版本管理:
-
优点:
- 易于安装和切换不同的 Python 版本。
- 可以在全局或项目级别设置 Python 版本。
- 不改变系统的 Python 版本设置。
virtualenv
-
功能:
- 环境隔离:
virtualenv
用于创建独立的 Python 环境。每个环境都有自己的 Python 解释器和独立的包管理(即site-packages
目录)。 - 依赖管理:在虚拟环境中安装的 Python 包不会影响其他环境或系统的 Python 包。
- 环境隔离:
-
优点:
- 简单易用,适合快速创建和使用隔离的 Python 环境。
- 与任何 Python 版本兼容,适用于需要在不同项目中使用不同的库和依赖。
主要区别
-
管理对象:
pyenv
:管理的是 Python 的不同版本。virtualenv
:管理的是在同一 Python 版本下的不同隔离环境。
-
用途和场景:
pyenv
:当你需要在同一系统上使用多个 Python 版本时,pyenv
是理想的选择。virtualenv
:当你需要在项目之间隔离依赖和环境时,virtualenv
是非常有效的工具。
结合使用
pyenv-virtualenv
:这是一个结合了pyenv
和virtualenv
功能的插件。它允许你在pyenv
管理的 Python 版本下创建和管理虚拟环境,提供了更加完整和灵活的解决方案。
使用环境管理工具如 pyenv
和 pyenv-virtualenv
可以帮助你更好地管理 Python 版本和虚拟环境,从而避免系统升级导致的环境问题。以下是如何安装和使用这些工具的步骤:
安装 pyenv
和 pyenv-virtualenv
- 安装依赖:
首先安装一些构建 Python 所需的依赖包:
sudo pacman -S --needed base-devel openssl zlib xz
- 安装
pyenv
:
使用 Git 克隆pyenv
仓库到本地:
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
然后将 pyenv
添加到你的 shell 配置文件中(例如 ~/.bashrc
或 ~/.zshrc
):
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
source ~/.bashrc
- 安装
pyenv-virtualenv
:
同样使用 Git 克隆pyenv-virtualenv
:
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
并在 ~/.bashrc
或 ~/.zshrc
中添加:
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
使用 pyenv
管理 Python 版本
- 列出可用的 Python 版本:
pyenv install --list
- 安装特定版本的 Python:
假设你想安装 Python 3.8.10:
pyenv install 3.8.10
- 设置全局 Python 版本:
将 Python 3.8.10 设置为全局默认版本:
pyenv global 3.8.10
- 设置当前目录 Python 版本:
在项目目录或其子目录中设置特定的 Python 版本:
cd /path/to/your/project
pyenv local 3.8.10
- 设置shell Python 版本:
pyenv shell 3.8.10
- 验证当前使用的 Python 版本:
python --version
这应该会显示你设置的版本号,例如 Python 3.8.10
。
- 卸载不要的版本:
# 查看已安装的版本
ls $(pyenv root)/versions
ls ~/.pyenv/versions
# 卸载旧版本,也可以直接删除对应的文件夹实现卸载
pyenv uninstall <versions>
使用 virtualenv
管理虚拟环境
- 安装
virtualenv
:
安装virtualenv
工具(假设你已经有一个基本的 Python 安装):
pip install virtualenv
- 创建虚拟环境:
在你的项目目录中创建一个虚拟环境:
cd /path/to/your/project
virtualenv venv
这将在项目目录下创建一个名为 venv
的文件夹,里面包含了独立的 Python 解释器和包目录。
- 激活虚拟环境:
在 Windows 上:
.\venv\Scripts\activate
在 macOS 和 Linux 上:
source venv/bin/activate
- 安装项目依赖:
激活虚拟环境后,你可以自由安装项目所需的 Python 包:
pip install requests
- 验证环境:
确保包安装在虚拟环境中:
pip list
- 退出虚拟环境:
使用以下命令退出虚拟环境:
deactivate
结合使用 pyenv
和 virtualenv
如果你需要在一个特定的 Python 版本下创建虚拟环境,可以结合使用 pyenv
和 virtualenv
:
- 安装
pyenv-virtualenv
插件(确保pyenv
已安装)。 - 创建虚拟环境:
pyenv virtualenv 3.8.10 myenv
- 激活虚拟环境:
pyenv activate myenv
- 退出虚拟环境:
pyenv deactivate