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没安装好,需要卸载重新安装。
卸载
- 首先强制删除已安装的程序及其关联
[root@spider1 bin]# rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps
- 然后删除所有残余文件,xargs表示允许你对输出执行其他某些命令
[root@spider1 bin]# whereis python |xargs rm -frv
- 最后验证删除结果,返回无结果表示完全删除
[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可正常执行。