Python编程:pyenv管理多个python版本环境

简介: Python编程:pyenv管理多个python版本环境

pyenv 多版本的Python管理工具

https://github.com/pyenv/pyenv


pyenv-virtualenv 虚拟环境管理工具

https://github.com/pyenv/pyenv-virtualenv


mac系统安装

$ brew install pyenv
$ brew install pyenv-virtualenv

配置环境变量


$ vim ~/.bash_profile

写入内容


# pyenv
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

配置生效


$ source ~/.bash_profile

其他系统安装

# 安装
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
# 卸载
$ rm -fr ~/.pyenv

配置vim ~/.bashrc


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

参考:https://github.com/pyenv/pyenv-installer


使用

常用命令


pyenv install --list # 列出可安装版本
pyenv install <version> # 安装对应版本
pyenv install -v <version> # 安装对应版本,若发生错误,可以显示详细的错误信息
pyenv uninstall <version> # 卸载对应版本
pyenv versions # 显示当前使用的python版本
pyenv which python # 显示当前python安装路径
pyenv global <version> # 设置默认Python版本
pyenv local <version> # 当前路径创建一个.python-version, 以后进入这个目录自动切换为该版本
pyenv shell <version> # 当前shell的session中启用某版本,
# 优先级: shell > local > global

虚拟环境管理


pyenv virtualenvs # 列出当前虚拟环境
pyenv virtualenv env # 从默认版本创建虚拟环境
pyenv virtualenv 3.6.4 env-3.6.4 # 创建3.6.4版本的虚拟环境
pyenv activate env-3.6.4 # 激活 env-3.6.4 这个虚拟环境
pyenv deactivate # 停用当前的虚拟环境
pyenv uninstall env-3.6.4 # 删除 env-3.6.4 这个虚拟环境

相比这个,我还是比较喜欢virtualenvwrapper的指令


workon py3

当然可以修改别名


$ vim ~/.bash_profile
# 会出现过时提示
# alias workon="pyenv activate"
alias workon="pyenv shell"

.python-version文件

目录中有 .python-version 文件,进入目录后会自动切换到对应的Python版本



$ python --version
Python 2.7.16
$ cd /demo
# 创建 .python-version文件
$ pyenv lolcal py370
$ ls
.python-version
$ cat .python-version
py370
$ python --version
Python 3.7.0

参考

pyenv 安装及常用命令


pyenv下载速度慢

手动下载安装包

https://npm.taobao.org/mirrors/python/


放到目录下, 没有就新建

~/.pyenv/cache

遇到的问题

1、切换环境的时候会提示:


$ pyenv activate py370
prompt changing will be removed from future release. 
configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

如果按照提示配置,切换版本后,没有了版本提示,不知道自己处于什么版本


修改配置文件 ~/.bash_profile


$ vim ~/.bash_profile
# pyenv
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
# 添加版本号提示
export PS1='($(pyenv version-name)) '$PS1

可是这样会导致PyCharm命令行多一个版本提示,无法忍受


(py370)(py370) $

还有一个办法是使用


$ pyenv shell py370

参考:

pyenv intall 下载速度特别慢?

https://github.com/pyenv/pyenv-virtualenv/issues/135


Linux环境下安装pyenv

安装pyenv

1、设置安装目录


安装目录默认是PYENV_ROOT=${HOME}/.pyenv,如果需要多用户使用,那么会遇到一些权限问题


自定义安装目录,让所有用户都能用:

$ vim /etc/profile.d/custom.sh
# 设置目录 
export PYENV_ROOT=/usr/local/pyenv

2、设置pyenv及其插件下载源


如果直接使用官网给出的下载方式,默认直接从github下载安装, 会非常慢

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

可以自动同步到gitee,并修改下载地址


(1)先手动下载安装文件

$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer > pyenv-installer.sh

(2)修改下载源

if [ -n "${USE_GIT_URI}" ]; then
#   GITHUB="git://github.com"
  GITHUB="git://gitee.com"
else
#   GITHUB="https://github.com"
  GITHUB="https://gitee.com/"
fi
# [github]pyenv -> [gitee]mouday
checkout "${GITHUB}/mouday/pyenv.git"            "${PYENV_ROOT}"
checkout "${GITHUB}/mouday/pyenv-doctor.git"     "${PYENV_ROOT}/plugins/pyenv-doctor"
checkout "${GITHUB}/mouday/pyenv-installer.git"  "${PYENV_ROOT}/plugins/pyenv-installer"
checkout "${GITHUB}/mouday/pyenv-update.git"     "${PYENV_ROOT}/plugins/pyenv-update"
checkout "${GITHUB}/mouday/pyenv-virtualenv.git" "${PYENV_ROOT}/plugins/pyenv-virtualenv"
checkout "${GITHUB}/mouday/pyenv-which-ext.git"  "${PYENV_ROOT}/plugins/pyenv-which-ext"

(3)执行安装命令

$ bash pyenv-installer.sh

微信小程序获取系统时间、时间戳、时间时间戳加减

或者直接使用已修改好的版本,通过gt工具进行下载

# 直接下载安装
$ wget https://raw.githubusercontent.com/mouday/gt-project/main/templates/template-pyenv-installer.sh | bash
# 或者使用 gt
$ gt pyenv-installer.sh | bash

安装Python

默认是从Python官网下载,如果速度慢可以修改下载源


更多变量可参考: python-build

$ vim /etc/profile.d/custom.sh
export PYTHON_BUILD_MIRROR_URL=https://npm.taobao.org/mirrors/python

或者,先手动下载到缓存文件夹中再安装


$ cd /usr/local/pyenv/cache
$ wget https://npm.taobao.org/mirrors/python/3.7.0/Python-3.7.0.tar.xz

安装Python和创建虚拟环境


# 安装
$ pyenv install 3.7.0
# 创建虚拟环境
$ pyenv virtualenv 3.7.0 py370

问题:No module named ‘pyexpat’

Mac系统 10.14.10 下 安装Python,报错


$ pyenv install 3.7.0
No module named 'pyexpat'

解决方法


SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk \
MACOSX_DEPLOYMENT_TARGET=10.14 \ 
pyenv install 3.7.0

如果还提示openssl错误,那么使用如下方法


         

更多问题可参考

https://github.com/pyenv/pyenv/wiki/Common-build-problems


Mac 10.14 下 pyenv 安装 No module named ‘pyexpat’

相关文章
|
13天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
13天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
17天前
|
缓存 监控 Python
解密Python中的装饰器:优雅而强大的编程利器
Python中的装饰器是一种强大而又优雅的编程工具,它能够在不改变原有代码结构的情况下,为函数或类添加新的功能和行为。本文将深入解析Python装饰器的原理、用法和实际应用,帮助读者更好地理解和利用这一技术,提升代码的可维护性和可扩展性。
|
1天前
|
5G Python
Windows11搭建Python环境(Anaconda安装与使用)
Windows11搭建Python环境(Anaconda安装与使用)
9 0
|
6天前
|
安全 数据处理 开发者
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
19 1
|
6天前
|
人工智能 数据挖掘 程序员
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
35 0
|
6天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
14 0
|
7天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
20 0
|
7天前
|
Python
Python金融应用编程:衍生品定价和套期保值的随机过程
Python金融应用编程:衍生品定价和套期保值的随机过程
22 0
|
8天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
50 0

热门文章

最新文章