原创

[python]linux切换版本

前言

我机器用的python是3.10的,虽然是主要版本,但是目前有些库还是会报错,比如我这两天想用lxml,但是不支持3.10,报错:

ImportError                               Traceback (most recent call last)
Input In [2], in <cell line: 1>()
----> 1 from lxml import etree
      2 path_to_file = '/home/ya/xml/PostHistory.xml'
      4 def iterate_xml(xmlfile):

ImportError: /home/ya/.local/lib/python3.10/site-packages/lxml/etree.cpython-310-x86_64-linux-gnu.so: undefined symbol: _PyGen_Send

pyenv

pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
pyenv 能让你简单的切换python的版本,

pyenv是如何工作的

通过即时注入path的方式,拦截python命令

因为操作系统是通过查找类似/usr/local/bin:/usr/bin:/bin目录的方式来找到执行的程序,在操作系统找到后,就调用对应的程序来执行.

pyenv是通过在环境变量中注入一个自定义的路径,来拦截要调用的python版本的

比如:$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin

安装

curl https://pyenv.run | bash

或者

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

回车即可

重新打开一个shell界面,输入sh pyenv -v
看到输出版本号,则代表安装成功.

如果提示找不到命令,检查环境变量是否增加,可以手动增加,比如编辑文件vim ~/.bashrc,在文件末尾增加

 export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"

然后使用命令source ~/.bashrc刷新环境变量即可.

安装python指定版本

我本地已经有了3.10的版本,我现在安装一个3.9的版本

输入

pyenv install 3.9.10

因为传输速度实在太慢,我需要套个代理来加速下载,执行

export https_proxy=socks5://xxxx:1080
export http_proxy=socks5://xxxx:1080
[ya@ya-PC ~]$ pyenv install 3.9.10
Downloading Python-3.9.10.tar.xz...
-> https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz
Installing Python-3.9.10...
Installed Python-3.9.10 to /home/ya/.pyenv/versions/3.9.10

切换python指定版本

这里提供三种方式:
第一种,只针对当前的shell环境切换版本,使用命令

pyenv shell 3.9.10

第二种,当前目录或者子目录中选择.(不知道是个啥)

pyenv local <version>

第三种,针对全局的(当前用户)

pyenv global 3.9.10

我使用了第三种,直接执行成功切换,可以使用python3 -V查看版本

参考资料

  1. pyenv readme
  2. pyenv-installer
温馨提示:
本文最后更新于 2022年05月13日,已超过 14 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录