在看了几个开源的python环境管理器的评论后, 我打算入手 pyenv, 该项目有以下几个优势:
- 该项目使用纯shell脚本语言实现, 天然亲和linux开发环境.
- 通过设置的PATH环境变量和shims方法隔离的实现方案非常轻量化.
- 子命令引入了compgen补全功能, 对命令输入操作友好.
- 源码开源, 可扩展性好, 可以做再开发.
对于使用 pyenv 完成 日常工作的小伙伴, 这章看完就可以完美的解决python虚拟环境日常操作.
-
pyenv 安装(linux)
pyenv 使用shell语言实现, 不依赖其他额外环境, 对linux比较亲和.# 进入程序目录, 我放在 /home/hocker/workspace/programs 中 # 如果安装失败或者中断, 需要将 pyenv 目录删除了才能执行. PYENV_ROOT=$HOME/workspace/programs/pyenv curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash cat >> ~/.bashrc << EOF # >>> pyenv initialize >>> # Load pyenv automatically by appending # the following to # ~/.bash_profile if it exists, otherwise ~/.profile (for login shells) # and ~/.bashrc (for interactive shells) : export PYENV_ROOT="$PYENV_ROOT" export PATH="\$PYENV_ROOT/bin":\$PATH eval "\$(pyenv init -)" # Restart your shell for the changes to take effect. # Load pyenv-virtualenv automatically by adding # the following to ~/.bashrc: eval "\$(pyenv virtualenv-init -)" # <<< pyenv initialize <<< EOF
-
pyenv 管理 python 版本的查看,安装与卸载
- 查看pyenv 支持版本
pyenv install --list
- 查看python已安装版本
pyenv versions
- 安装指定python版本
pyenv install 3.11.9 # 下载可能非常慢 可以通过浏览器在官网或者其他渠道先下载 然后复制到本地目录, 使用 PYTHON_BUILD_BUILD_PATH 变量设置到本地目录, 然后再执行命令操作. PYTHON_BUILD_BUILD_PATH=$PYENV_ROOT/build pyenv install 3.11.9
安装python的过程中, 可能会报下面错误
-> https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz Installing Python-3.11.9... Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/hocker/workspace/programs/pyenv/versions/3.11.9/lib/python3.11/bz2.py", line 19, in <module> from _bz2 import BZ2Compressor, BZ2Decompressor ModuleNotFoundError: No module named '_bz2' WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib? Traceback (most recent call last): File "<string>", line 1, in <module> ModuleNotFoundError: No module named 'readline' WARNING: The Python readline extension was not compiled. Missing the GNU readline lib? Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/hocker/workspace/programs/pyenv/versions/3.11.9/lib/python3.11/ssl.py", line 98, in <module> import _ssl # if we can't import it, let the error propagate ModuleNotFoundError: No module named '_ssl' ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
执行操作
sudo apt install libbz2-dev libreadline-dev libssl-dev libsqlite3-dev -y
- 删除python的版本
pyenv uninstall 3.11.9 # 删除 python 版本, 系统会提示 是否删除依赖该版本的虚拟环境, # 如果虚拟环境不能删除, 则取消该次版本删除操作.
-
pyenv 管理 python 虚拟环境的查看,安装与卸载
- 查看python已建立的虚拟环境
pyenv virtualenvs
- 建立指定python的虚拟环境
pyenv virtualenv 3.11.9 flask # 3.11.9 是已有的 python版本 # flask 是环境名称 pyenv virtualenv flask flask2 # 注意, 这种创建flask2 的方式并不能继承 flask 中的已有安装包 # 只继承了 flask 基于 3.11.9 这个属性.
- 卸载python的虚拟环境
pyenv uninstall 虚拟环境名称
-
pyenv 使用 python 虚拟环境
- 手动打开与关闭 python 虚拟环境
pyenv activate flask pyenv deactivate
- 指定全局默认 python 虚拟环境
pyenv global flask torch # 指定多个时, 优先使用前一个, 至于后一个什么时候会触发, 我还没理解, 希望懂的大哥给小弟说说. # 恢复默认, 使用system pyenv global system
- 目录指定和取消 python 虚拟环境, 指定后下次进入该目录, 自动使用该环境
# 可以使用版本和虚拟环境 pyenv shell 3.11.9 pyenv shell flask pyenv shell --unset # 取消
pyenv 是一个优秀的虚拟环境操作框架, 原生shell实现, 对其他项目依赖少, 很适合做服务器的环境管理工具.