python版本控制-pyenv

2018/7/6 学习提升

pyenv是一个python版本管理工具,用来配置特定的python环境,并且可以随意切换。

# windows

# 安装pyenv

以管理员身份运行powershell,执行以下命令即可安装

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
1

使用pyenv切换环境,无论windows还是linux都可以使用pyenv,linux比较容易安装。

需要注意的是,如果原本电脑安装了python,需要保证在系统环境变量中,pyenv的环境变量要在python的上面,否则会造成pyenv切换了也没有效果还是使用原本电脑安装的python环境。

vscode可以安装pythonEnvironmentManage插件,vscode下面就可以看到当前使用的版本.

vscode settings.json里加入以下两行(也许不需要)

  "python.terminal.activateEnvInCurrentTerminal": true,
  "python.envFile": "${workspaceFolder}/.python-version"
1
2

# 使用

# 下载python包

使用pyenv默认源下载会超时,可以先从官网将包下载下来放到默认目录,在执行安装命令

  • 下载python

打开 Python 官网 (opens new window) 然后进入 Python Dowloads 的 Source code 页面 (opens new window),也就是源码页面,下 .tar.xz 的压缩包或者exe文件到pyenv的缓存目录C:\Users\${user}\.pyenv\pyenv-win\install_cache 如果没有这个目录可以手动创建,将${user}替换成自己本地实际用户名

  • 安装指定版本python如3.10.11

    pyenv install 3.10.11 此时会自动取缓存目录寻找包。

# 参考

# Linux

# 安装pyenv

pyenv-github (opens new window)

curl https://pyenv.run | bash
1

linux上如果没有代理git clone会超时,可以把这个脚本提前下载到本地,把变量里的github.com改为kgithub.com,提高下载速度。

默认安装在$HOME/.pyenv下

# 配置环境变量

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
1
2
3

然后,如果您有 ~/.profile~/.bash_profile~/.bash_login ,则也在此处添加命令。如果您没有这些,请将它们添加到 ~/.profile

# 配置环境依赖

# 安装基础包

否则pyenv install 时编译会失败

# ubuntu 22.02
sudo apt install libssl-dev libffi-dev libncurses5-dev zlib1g zlib1g-dev libreadline-dev libbz2-dev libsqlite3-dev make gcc lzma lzma-dev liblzma-dev -y
1
# centos7.8
yum install libssl-dev libffi-dev libncurses5-dev zlib1g zlib1g-dev libreadline-dev libbz2-dev libsqlite3-dev make gcc xz-devel ncurses-devel readline-devel -y
1

# openssl1.1

ubuntu高版本和centos8默认安装oepnssl1.1无需处理。

建议编译安装,yum安装或删除如果误操作可能会导致ssh wget yum都无法使用

# centos7.8
  • 查看当前版本:

openssl version 默认时1.0.2

  • 编译安装openssl

    wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate
    tar -zxvf openssl-1.1.1n.tar.gz
    cd openssl-1.1.1n
    ./config --prefix=/usr/local/openssl  #路径需要选这个
    make -j && make install
    openssl version #此时版本已是1.1
    
    1
    2
    3
    4
    5
    6
  • 替换lib库

    一定注意不要随意删除lib文件,操作前ls -l看下哪些是软链,哪些是文件,误删除了会导致ssh yum wget curl等使用libssl库的命令都无法使用

    mv /usr/bin/openssl /usr/bin/openssl.bak
    ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
    openssl version # 验证是否正常
    # 软链到lib64下
    ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
    openssl version # 验证是否正常
    不断开当前连接,新建一个连接测试ssh是否正常
    
    1
    2
    3
    4
    5
    6
    7
    8

# 安装python

pyenv install python时特别慢,可以手动下载需要安装的python版本,放到指定目录下,再次运行pyenv install就可以使用本地包安装.

pyenv install -l #可以看到当前的版本,可以过滤指定版本比如3.10,下面需要填更具体的版本如3.10.12
# 直接运行以下命令即可将指定版本放到指定目录下进行安装
export v=3.10.11; wget https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/; pyenv install $v 
1
2
3

此时centos7.8可能还会报找不到ssl module,这是因为pyenv install命令编译python时没有指定openssl库,可以自己解压python自己编译好之后放到~/.pyenv/versions下。

### 解压python,进入目录,如果编译过就make clean清除下
cd /usr/local/Python-3.10.12/
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl --with-openssl-rpath=auto  # 就是这行,指定openssl,并且是auto。
make -j 
make install 
### make时如果缺少什么包再yum安装即可。
 cp -r python3 .pyenv/versions/3.10.12
 pyenv versions #此时可看到3.10.12
1
2
3
4
5
6
7
8

# 使用pyenv

一般来说要使用install的python版本创建一个虚拟环境,此后的操作在虚拟环境中使用

# 
 pyenv virtualenv 3.10.12  langchainglm  # 第三个是使用的python版本,第四个是起的名字
 pyenv activate langchainglm # 激活环境
 python -m pip --version # 只运行pip则使用的3.10.12的pip并非自定义环境的pip
1
2
3
4

# 更换 pip 源

在使用Python安装包工具pip时经常会出现下载很慢的情况,这其中有很大一部分原因和pip的源有关,在我们安装python后,通常python解释器自带pip这个工具,但是这里pip是设置的默认源,也就是官方源:https://pypi.org/simple,这个源在国内的下载速度是很慢的,所以我们为了提高包的下载速度我们可以通过换源来实现

清华源要比阿里云的快。

# 临时换源

临时换源只需要在pip安装包时,加上一个-i参数后接源的url即可:

#清华源
pip install markdown -i https://pypi.tuna.tsinghua.edu.cn/simple

# 阿里源
pip install markdown -i https://mirrors.aliyun.com/pypi/simple/

# 腾讯源
pip install markdown -i http://mirrors.cloud.tencent.com/pypi/simple

# 豆瓣源
pip install markdown -i http://pypi.douban.com/simple/

1
2
3
4
5
6
7
8
9
10
11
12

# 永久换源

# 命令行

# 清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 阿里源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 腾讯源
pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple

# 豆瓣源
pip config set global.index-url http://pypi.douban.com/simple/# 换回默认源pip config unset global.index-url

1
2
3
4
5
6
7
8
9
10
11
12

# 配置文件

# Linux
  1. 在根目录下创建/修改~/.pip/pip.confpip配置文件;

  2. 进入文件新增/修改内容;

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com
1
2
3
4
5
# Windows
  1. windows在%HOMEPATH%\pip\pip.ini中修改上面第二步的内容;(例如:C:\Users\hp\AppData\Roaming\pip\pip.ini)

  2. 保存文件退出;

# 常见问题

  • 安装包的时候出现
csharp复制代码Collecting beautifulsoup4
The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS it is recommended to use HTTPS instead, otherwise you may silence this warning and allow it anyways with ‘–trusted-host mirrors.aliyun.com’.
Could not find a version that satisfies the requirement beautifulsoup4 (from versions: )
No matching distribution found for beautifulsoup4
1
2
3
4
  • 这是一个问题是在pip镜像升级报警,只需要添加信任源即可:

    • 临时换源处理

    • css
      复制代码pip install beautifulsoup4 --trusted-host mirrors.aliyun.com
      
      1
      2
    • 更换默认源配置(一劳永逸)

    • ini复制代码[install]
      trusted-host=pypi.douban.com
      
      1
      2

# 参考

Last Updated: 2023/9/10
只爱西经
林一