版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_1290259791/article/details/85092867
管理多个相互独立的
Python
虚拟开发环境
最终实现
- pyenv:同一台电脑管理多个
Python
版本 - pipenv:每一个项目建立项目隔绝的虚拟环境
- direnv:进入项目自动激活虚拟环境
Pyenv
pyenv
可以改变全局的Python
版本,安装多个版本的Python
, 设置目录级别的Python
版本。
安装 Pyenv
brew install pyenv
或 pip install pyenv
常用命令
pyenv install -list
可安装版本pyenv install <version>
安装对应版本pyenv uninstall <version>
卸载指定版本pyenv versions
显示当前使用的版本pyenv which python
显示当前Python
安装路径pyenv global <version>
设置全局的Python
版本,通过将版本号写入 ~/.pyenv/version 文件的方式。pyenv local <version>
设置Python
局部版本,通过将版本号写入当前目录下的.python-version
文件的方式。pyenv shell <version>
设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。优先级最高。pyenv shell --unset
可以用于取消当前 shell 设定的版本。pyenv rehash
创建垫片路径(为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions//bin/,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)
Python 优先级
shell > local > global
安装 Python
我这里出现了错误,解决方式在最后
➜ ~ pyenv install 3.7.0
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
python-build: use readline from homebrew
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.7.0 to /Users/hubo/.pyenv/versions/3.7.0
没有将 sqlite3
编译完成,这个可以通过 brew install sqlite
安装。
pipenv
综合了 virtualenv , pip 和 pyenv 三者的功能。能够自动为项目创建和管理虚拟环境。
pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包
- Pipfile:在使用pipenv添加或删除包时,自动维护 Pipfile 文件。
- Pipfile.lock:锁定安装包的版本和依赖信息,避免构建错误。
安装 Pipenv
brew install pipenv
或 pip install pipenv
常用命令
- pipenv install 安装包
- pipenv shell 激活当前项目的虚拟环境
- pipenv install pytest --dev 安装开发依赖包
- pipenv graph 图形显示包依赖关系
- pipenv lock 生成
lockfile
- pipenv lock -r 生成requirements.txt文件
- pipenv lock -r -d 生成dev-packages的requirements.txt文件
- pipenv uninstall --all 删除所有安装包
- pipenv install --three # 使用python3创建
pipenv install --two # 使用python2创建
pipenv --python 路径 # 自定义python路径
pipenv --python 3 # 指定python版本
pipenv --python 3.6
pipenv --python 2.7.14
pipenv install -r path/to/requirements.txt # 安装一个列表
pipenv --venv # 当前虚拟环境目录
pipenv --py # 查看当前虚拟环境的python地址
pipenv --where # 本地项目绝对路径
pipenv --upgrade # 更新pipenv&pip到最新版本
pipenv --envs # 输出环境变量信息
pipenv --rm # 删除当前虚拟环境
pipenv --bare # 精简输出
pipenv claen # 删除未在Pipfile.lock中指定的安装包
pipenv update pkg # 更新包,不加pkg,更新所有
pipenv uninstall --all # 卸载虚拟环境所有包
为项目建立虚拟环境
在.bashrc
或 bash_profile
下添加下面命令,pipenv会在当前目录下创建.venv的目录,以后都会把模块装到这个.venv下
export PIPENV_VENV_IN_PROJECT=1 # 自动激活虚拟环境
指定 Python 版本信息
创建虚拟环境的时候,我们可以指定使用的python版本信息,类似pyenv。
pipenv会自动扫描系统寻找合适的版本信息,如果找不到的话,同时又安装了pyenv, 它会自动调用pyenv下载对应的版本的python
$ pipenv --python 3
$ pipenv --python 3.6
$ pipenv --python 2.7.14
➜ demo1 pipenv --python 3.6.0
Warning: Python 3.6.0 was not found on your system...
Would you like us to install CPython 3.6.0 with pyenv? [Y/n]: y
Installing CPython 3.6.0 with pyenv (this may take a few minutes)...
⠋
dirnev
下载
brew install direnv
配置变量
# 在~/.zshrc文件末尾追加
$ echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
虚拟环境配置
在虚拟环境目录下
$ pipenv --three
$ echo layout_pipenv >> .envrc
错误
pyenv install
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
问题是缺少zlib
brew install zlib
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
检查一下 zlib 或 sqlite3 是不是已经安装,但即使已经通过 homebrew 安装了以上 Package,依然会出现这些错误。这是因为 pyenv 无法找到 homebrew 安装的库的路径,需要手动指定:
export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/sqlite/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/sqlite/include"