pyenv是一个python环境版本管理器,当你有甚多项目,但是用的python版本不同时,为了让程序运行,你需要设定特点的py版本。这时pyenv就能发挥作用了。pyenv也能让你装多个py版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 查看当前版本 pyenv version # 查看所有版本 pyenv versions # 查看所有可安装的版本 pyenv install --list # 安装指定版本 pyenv install 3.6.5 # 安装新版本后rehash一下 pyenv rehash # 删除指定版本 pyenv uninstall 3.5.2 # 指定全局版本 pyenv global 3.6.5 # 指定多个全局版本, 3版本优先 pyenv global 3.6.5 2.7.14 # 实际上当你切换版本后, 相应的pip和包仓库都是会自动切换过去的
virtualenv是一个虚拟环境管理器,当你的呈现需要不同的程序包版本支持的时候,而且它们往往还是相互排斥的,那么你就可以用它来解决,首先你创建一个虚拟环境,然后在这个环境下安装所需要的包,这样就可以运行相应的呈现了,前提是你需要先进入并激活对应的虚拟环境。
参考:这里
创建并进入虚拟环境
1 2 3 4 5 6 7 8 9 10 cd code/python_envs # 方式1: mkvirtualenv envname01 # 创建完毕会自动进入该虚拟环境 # 方式2: virtualenv envname02 workon envname02 # 进入该虚拟环境 # 方式3: virtualenv envname03 cd envname03 source bin/activate # 激活并进入虚拟环境
配置环境
1 2 3 pip3 install flask pip3 install django pip3 install Scipy
退出环境
基于某Python环境创建虚拟环境:
1 2 mkvirtualenv -p python2.7 envname01 mkvirtualenv -p python3.6 envname02
常用命令:
1 2 3 4 5 6 7 8 9 10 mkvirtualenv envname02 #创建并进入虚拟环境 mkvirtualenv -p python3.6 envname02 #基于某Python3.6环境创建虚拟环境 workon #列出虚拟环境: deactivate #退出虚拟环境 workon envname02 # 切换虚拟环境2 pip3 install 模块名 #为虚拟环境安装模块 pip3 uninstall 模块名 #为虚拟环境卸载模块 lssitepackages | pip list | pip3 list #查看虚拟环境里安装了哪些包 cpvirtualenv env1 env2 # 复制环境 前面的是原文件 后面的拷贝后的新文件 rmvirtualenv env2 #删除虚拟环境
用pyenv安装python3.6.14遇到的坑
最近升级了Big Sur mac系统,但是用pyenv安装python3.6.14失活不成功,运行:
1 CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.6.14 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
提示如下:
1 2 3 4 5 6 7 8 9 10 -c ./Modules/pwdmodule.c -o Modules/pwdmodule.o ./Modules/posixmodule.c:8210:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration] ret = sendfile(in, out, offset, &sbytes, &sf, flags); ^ ./Modules/posixmodule.c:10432:5: warning: code will never be executed [-Wunreachable-code] Py_FatalError("abort() called from Python code didn't abort!"); ^~~~~~~~~~~~~ 1 warning and 1 error generated. make: *** [Modules/posixmodule.o] Error 1 make: *** Waiting for unfinished jobs....
后来,参考了这篇 ,运行了下面的代码:(功能是在bash_profile里添加环境判断):
1 2 echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile #添加环境判断 source ~/.bash_profile #更新配置文件
最终才成功安装,这个坑很深。