linux 安装使用 pyenv 虚拟环境

这篇文章已过时,不要再参考,例如删除python会导致一些linux系统的yum无法使用,没有yum,安装git和很多软件都很麻烦!!!!

pyenv介绍

pyvenv 与virtualenv 功能和用法类似。 不同点在于: pyvenv 只支持Python 3.3 及更高版本,而virtualenv 同时支持Python 2.x 和Python 3.x; pyvenv 是Python 3.x 自带的工具,不需要安装,而virtualenv 是第三方工具,需要安装。
目前感觉安装 virtualenv 是主流方案,后续更新virtualenv的安装和使用方法

问题:在本机能正常执行的脚本,放到服务器报:

Module Not Found Error: No module named '_ctypes'

ctypes是系统自带的外部函数库,一般不需要单独安装,linux服务器自带有python2.7的版本,直接使用python命令,import ctypes是正常的。
但使用python3,import ctypes会报这个错误。
说明python3没安装好,需要卸载重新安装。

卸载

  1. 首先强制删除已安装的程序及其关联
[root@spider1 bin]# rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps
  1. 然后删除所有残余文件,xargs表示允许你对输出执行其他某些命令
[root@spider1 bin]# whereis python |xargs rm -frv
  1. 最后验证删除结果,返回无结果表示完全删除
[root@spider1 bin]# whereis python

安装

安装可以直接使用官方推荐的命令一键安装:

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

我这里因为没有FQ,下载安装包会超时,只能替换源地址。

1. 拷贝下面的代码到shell中创建一个install.sh的文件

#!/usr/bin/env bash
set -e
[ -n "$PYENV_DEBUG" ] && set -x
 
if [ -z "$PYENV_ROOT" ]; then
  export PYENV_ROOT="${HOME}/.pyenv"
fi
 
colorize() {
  if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"
  else echo -n "$2"
  fi
}
 
# Checks for `.pyenv` file, and suggests to remove it for installing
if [ -d "${PYENV_ROOT}" ]; then
  { echo
    colorize 1 "WARNING"
    echo ": Can not proceed with installation. Kindly remove the '${PYENV_ROOT}' directory first."
    echo
  } >&2
    exit 1
fi
 
failed_checkout() {
  echo "Failed to git clone $1"
  exit -1
}
 
checkout() {
  [ -d "$2" ] || git clone --depth 1 "$1" "$2" || failed_checkout "$1"
}
 
if ! command -v git 1>/dev/null 2>&1; then
  echo "pyenv: Git is not installed, can't continue." >&2
  exit 1
fi
 
if [ -n "${USE_GIT_URI}" ]; then
  GITHUB="git://github.com"
else
  GITHUB="https://github.com"
fi
GITHUB="https://gitee.com"
checkout "${GITHUB}/ibuki_fuuko/pyenv.git"            "${PYENV_ROOT}"
checkout "${GITHUB}/codeseth/pyenv-doctor.git"     "${PYENV_ROOT}/plugins/pyenv-doctor"
checkout "${GITHUB}/yuebanlaosiji/pyenv-installer.git"  "${PYENV_ROOT}/plugins/pyenv-installer"
checkout "${GITHUB}/codeseth/pyenv-update.git"     "${PYENV_ROOT}/plugins/pyenv-update"
checkout "${GITHUB}/unicode233/pyenv-virtualenv.git" "${PYENV_ROOT}/plugins/pyenv-virtualenv"
checkout "${GITHUB}/mouday/pyenv-which-ext.git"  "${PYENV_ROOT}/plugins/pyenv-which-ext"
 
if ! command -v pyenv 1>/dev/null; then
  { echo
    colorize 1 "WARNING"
    echo ": seems you still have not added 'pyenv' to the load path."
    echo
  } >&2
 
  { # Without args, `init` commands print installation help
    "${PYENV_ROOT}/bin/pyenv" init || true
    "${PYENV_ROOT}/bin/pyenv" virtualenv-init || true
  } >&2
fi

2. 执行这个sh,linux中输入以下命令设置环境变量

echo 'export PATH="/home/python/.pyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile
  • 查看pyenv版本
    pyenv -v
  • 更新pyenv
    pyenv update

3. 安装python

# 列出可安装的版本
pyenv install --list 
# 安装指定版本
pyenv install 3.7.9 
# 查看可使用的版本,前面带*表示当前使用的版本
pyenv versions
# 查看当前使用的版本
pyenv version
  • 使用pyenv global 配置当前用户的系统使用的python版本
$ pyenv global 3.6.4
$ pyenv versions
  system
  3.5.4
* 3.6.4 (set by /home/python/.pyenv/version)
$ python -V
Python 3.6.4
  • 使用pyenv shelll 配置当前shell的python版本,退出shell则失效
  • 使用pyenv local 配置所在项目(目录)的python版本

pyenv 安装 Python 使用国内源

用过 pyenv 的朋友应该都被它安装 Python 版本时巨慢的速度折磨过,究其原因还是国内访问官网的源速度上不去,所幸像其他软件的依赖包一样 Python 也有很多国内源。
这里我使用的是淘宝的源 https://npm.taobao.org/mirrors/python/
pyenv 没有配置源地址的地方,不过我们可以变通一下。
它安装 Python 的流程就是先将把包下载到 ~/.pyenv/cache 目录,然后在进行安装,慢也就慢在下载的这个过程。
先手动将包下载到指定目录,在执行 pyenv install 即可。
精简一下 shell 命令如下

v=3.8.5; curl -L https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -o ~/.pyenv/cache/Python-$v.tar.xz; pyenv install $v

也可以创建一个方法,放到 ~/.bashrc 文件中,以后方便直接使用

function pyinstall() {
    v=$1
    echo '准备按照 Python' $v
    curl -L https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -o ~/.pyenv/cache/Python-$v.tar.xz
    pyenv install $v
}
$ pyinstall 3.8.0

其他坑

1. pyenv global指定版本后, python命令不可用

将 pyenv init 脚本从 .bash_profile 移动到 .bashrc。

# Put it in .bashrc
# PyEnv
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# 同时增加:
alias python="$(pyenv which python)"
alias pip="$(pyenv which pip)"

source ~/.bashrc后,python可正常执行。

posted @ 2022-10-31 16:26  流失的痕迹  阅读(623)  评论(0编辑  收藏  举报