---#N: 2022/10/11 #U: future #S: writing #T: home #---
pyenv¶
Managing Multiple Python Versions With pyenv – Real Python.html
知识点有点多。
基本概念¶
系统自带 python,否则先安装最初的 python
安装 pyenv
安装 python 主版本
安装 virtualenv 版本
为工程或 shell 设置 version
本篇只记录 3~5。其中第2步安装安装 pyenv 最为麻烦,不过只需要安装一次。笔记见 see: install pyenv on ubuntu。
安装 Python 主版本¶
这里安装的版本是 python 的主版本,不是虚拟版本。
查看可安装的 python 版本列表:
pyenv install --list
pyenv install --list | grep " 3\.[678]"
pyenv install --list | grep "jython"
install python 3.8.15:
pyenv install -v 3.8.15
安装在了哪个目录呢? .pyenv/versions
版本选择:需要精确指定 python 的版本。
如果因为网络的原因安装不了,看: pyenv install offline
注意
在安装 Python 主版本的时候,很可能会受限于网络,会造成安装失败。方法是通过先下载安装包,再运行安装命令。见文末 _pyenv-install-offline。
主版本和虚拟版本¶
一个主版本占约 200M, 可以生成很多个相同版本的虑拟版本。这些虚拟版本每个虚拟版本共享了相同的主版本,单独占磁盘约 20M 。然后可以分别为不同的虚拟版本安装不同的 package。这样就实现了不同 app 应用开发的环境的隔离与最小化。在生成 requirements.txt 时,可以生成最小的依赖。
Installation Location¶
ls ~/.pyenv/versions/
Remove¶
$ rm -rf ~/.pyenv/versions/2.7.15
# or
pyenv uninstall 2.7.15
Using Your New Python¶
查看所有版本/正在工作的版本:
pyenv versions
python -V
which python
注意,命令 pyenv --version 看到的不是 python 的版本,而是 pyenv 的版本号。
切换版本:
pyenv global 2.7.15
pyenv versions
pyenv global system
注: 第1个安装的版本名字叫 system
这是将全局 global 版本设置为 system 版本吗?
Exploring pyenv Commands¶
$ pyenv commands
$ pyenv install
$ pyenv versions
$ pyenv which pip
$ pyenv global 3.6.8
pyenv local 2.7.15
pyenv shell 3.8-dev
set specific python version:
$ pyenv local 2.7.15
Virtual Environments¶
前面处理的是主要版本,这里才到虚拟版本。
Managing Multiple Python Versions With pyenv – Real Python
pyenv manages multiple versions of Python itself.
virtualenv/venv manages virtual environments for a specific Python version.
pyenv-virtualenv manages virtual environments for across varying versions of Python.
Creating Virtual Environments¶
Managing Multiple Python Versions With pyenv – Real Python
Creating Virtual Environments:
$ pyenv virtualenv <python_version> <environment_name>
Example:
$ pyenv virtualenv 3.6.8 myproject
A good practice is to name your environments the same name as your project.
Activating Your Versions:
pyenv local myproject
pyenv which python
$ pyenv activate <environment_name>
$ pyenv deactivate
上面的两行代码写在 .python-version 中? 进入或退入该目当时,会自动执行? 可以验证。
问题¶
3.6.8 是不是首先必须得存在呢? 和 myproject 所代表的 python 版本有何异同? 在磁盘上的表现有何区别?
为什么我在使用的过程中没有用到 activate/deactivate?
版本管理¶
金字塔模型,4个层级,它们的优先级是: shell > local > global > system。
计算机上有3个位上可以记录环境变量的设定:
~/.pyenv/version
/home/application/.python-version
$ PYENV_VERSION
global¶
第1个 ~/.pyenv/version 是全局设置,在 ~/.pyenv/version 文件中记录的环境变量名字,会自动应用到全局。例如,当你在任意目妹下打开一个新的 shell,它的初始python版本默认是由全局设置确定的。
全局环境变要以通过 直接修改该文件 [pyenv_global_file] 的内容实现,也可以通过命令实现:
$ cat pyenv global
$ pyenv global another-python-venv
$ cat pyenv global
此后,你所打开的 shell 默认就是 another-python-venv 环境了。
不过,global 环境的优先级很低,可被 pyenv shell 或 local 变量的值取代。
打开 ~/.pyenv/version 文件,修改其中的名字,保存。
local¶
每个 application (project) 设置和 global 不同的 python 版本:
$ pyenv local 3.8-dev
它会在当前项目目录下生成一个 .python-version 文件,例如:
$ /home/application/.python-version
它记录了当前目录及以下的子目录对应的 python 环境。这是一个局部永久性设置,优先级高于全局设置 (global)。
shell¶
如果只想临时切换 shell 中的 python 环境,可以这样:
$ pyenv shell another-version
此时的版本会记录在 PYENV_VERSION environment variable 中,而不会影响全局设置。如果重新开一个 shell,python 环境还是由 global 或 local 环境决定的。如果希望永久改变 shell 的设置,还是应该用前两个设置文件。
安装问题¶
pyenv install 的 python 下载太慢问题¶
或下载不下来,能离线安装吗?
pyenv install offline¶
(用镜像)下载所需压缩包,并放入 ~/.pyven/cache/ 目录
pyenv install version-number
原理: install 之前会重新检查缓存中是否已有下载好的文件
镜像备份¶
使用问题¶
Error: Pyenv deactivate not working (deactivate Bug)¶
Error: Pyenv deactivate not working · Issue #32
这是一个 bug,危险的解决方法:
$ sudo su
这样会退出虚拟环境,退回了系统原生自带的环境。
另外,用Pycharm 时,可以选择到系统自带的 Python 环境。