By: ckHuang
Email: [email protected]
前言:
首先,在安装之前让我们先了解下什么是“virtualenv”虚拟环境;引用 virtualenv 官网的原话:
virtualenv is a tool to create isolated Python environments.
意思为用来创建 Python 隔离环境的工具,即一个独立于系统之外的Python开发环境,其内部环境的改变不会影响系统的环境;虽然在 Python3.3 版本之后便内置了venv 模块,但是其功能有所缺失即不具备 virtualenv 的全部功能,所以还是建议大家安装具有全部功能的 virtualenv。
注⚠️:Python2.0+的版本已于2020年1月1日停止维护,在 Mac 的终端使用 python2.7 的时候也会发出提示:
$ python
WARNING: Python 2.7 is not recommended.
This version is included in macOS for compatibility with legacy software.
Future versions of macOS will not include Python 2.7.
Instead, it is recommended that you transition to using 'python3' from within Terminal.
因此,本教程只针对 Python3.0+ 的版本所制作
前期准备:
大概了解完 virtualenv 是什么之后,我们就开始在 MacBook 上面安装吧。笔者本人使用的是 Macbook Pro 2018,系统是目前为止最新的 Catalina (Version 10.15.4),其他配置的相同版本或者是日后更高版本的系统均适用。
第1步,打开 Macbook 上的终端/Terminal
-
第2步,我们要确认 Python3 的路径,先把这个路径记录下来备用
$ whereis python3
/usr/bin/python3
注⚠️:笔者的Python3路径如上“/usr/bin/Python3”,各位的路径可能会不相同,请各位自行查看
-
第3步,使用 Python3 自带的模块 pip3 对“virtualenv”进行搜索以确认是否存在此可下载模块
$ pip3 search virtualenv
然后我们可以得到一份包含“virtualenv”名称的模块列表,通过查询我们发现目前为止的最新 virtualenv 版本为 20.0.17
注⚠️:版本号会随时间更新,只需找到同名的模块即可,无须纠结版本号 -
第4步,同第3步相似,使用 pip3 查找包含“virtualwrapper”名称的模块列表,查看是否有此模块可下载。 virtualenvwrapper 是一个方便用于创建、更改与删除 virtualenv 虚拟环境的工具。
$ pip3 search virtualenvwrapper
同样,我们会得到一份模块名称列表,目前最新的 virtualenvwrapper 版本为 4.8.4
注⚠️:版本号会随时间更新,只需找到同名的模块即可,无须纠结版本号
安装过程:
在确认所有模块均可下载之后,我们便可以开始进行下一个重要步骤,将模块安装到 Python3 开发环境上,那我们现在就开始安装吧。
-
第1步,安装 virtualenv 虚拟环境,在命令行输入如下命令并执行:
$ pip3 install --user virtualenv
在自动完成下载以及安装后,终端会出现提示:
The script virtualenv is installed in 'Users/xxx/Library/Python/3.7/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to supperss this warning, use --no-warn-script-location.注⚠️:这里的“/Users/xxx/...”的xxx是笔者的文件夹名称,各位的有所不同,但不影响操作
此提示我们可以暂时忽略,因为在最后我们会修改一个文件让其重新定位到正确的path路径,我们现在先继续安装其他模块。
Tips:
如果按照原方法直接输入“$ pip3 install virtualenv”,则有可能会安装失败,并且终端会出现类似提示:
Could not install packages due to n EnvironmentError: [Errno 13] Permission denied: '/Library/Python/3.7'
Consider using the '--user' option or check the permissions.这是由于当前用户对修改目录的操作权限不够造成的,切记切记切记(重要的事情说三遍!!!)不要因为看到了“Premission denied”就立刻使用“$ sudo pip3 install virtualenv”这个拥有超级管理员权限的命令去安装;因为如果使用了“sudo”进行安装,后续很多操作也需要在超级管理员权限下进行操作,很容易会损坏整个开发环境甚至系统文件,因此我们只需要加入“--user”就可以正常安装。
-
第2步,安装 virtualenvwrapper 工具,在命令行输入如下命令并执行:
$ pip3 install --user virtualenvwrapper
同样,在自动完成下载以及安装后,终端会出现提示:
The script pbr is installed in '/Users/xxx/Library/Python/3.7/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
The script virtualenv-clone is installed in '/Users/xxx/Library/Python/3.7/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.同第1步,此提示可以暂时忽略,我们在之后便会对其环境变量 path 进行更改。
Tips:
再次提醒,安装此工具时务必在“pip3 install”后加上“--user”,否则安装程序有可能会因为当前用户对目录修改的权限不够而停止导致安装失败,并且终端会出现类似的提示:
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/3.7'
Consider using the '--user' option or check the permissions. -
第3步,修改环境变量 path:
注⚠️:这个地方是笔者踩坑踩得最多的地方,也还请各位多多留意
在目前为止最新的 Catalina 以及日后更新的系统中,zsh 将成为默认shell使用而不再是早期版本的 bash shellStarting with macOS Catalina, your Mac uses zsh as the default login shell and interactive shell. You can make zsh the default in earlier versions of macOS as well.
By default, your Mac uses either zsh or bash as the command-line interpreter for the login shell and interactive shell:
· zsh (Z shell) is the default shell for all newly created user accounts, starting with macOS Catalina.
· bash is the default shell in macOS Mojave and earlier.
zsh is highly compatible with the Bourne shell (sh) and mostly compatible with bash, with some differences. For more about zsh and its comprehensive command-line completion system, enter man zsh in Terminal.如上是Apple官网的原文,其大意为 zsh shell 将会成为默认 shell 存在于 Catalina 以及日后更新的系统,而 bash shell 则会作为 Mojave 以及之前的系统的默认 shell。
至此,大家应该明白默认 shell 的问题了,因为在新系统下,传统的方法(在".bash_profile"文件中加入环境变量 path 的方法)已经不适用,需要修改成在“.zshrc”文件中加入环境变量;现在我们就开始在新的默认 shell 下的配置吧。
首先,使用编辑器打开默认shell的配置文件“.zshrc”,其位置在“~/”(主)目录下,因此我们输入:
$ vim ~/.zshrc
注⚠️:笔者习惯使用 vim 所以在此使用 vim 作为 zsh shell 配置文件的编辑器,大家可按照自己喜欢的编辑器来编辑此文本然后,在“.zshrc”文件的末尾加入如下几句代码:
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenv
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUAL=$HOME/Library/Python/3.7/bin/virtualenv
source $HOME/Library/Python/3.7/bin/virtualenvwrapper.sh
接下来,笔者会解释这几句命令的作用:
- “# virtualenv and virtualenvwrapper”,这句只是注释,可加可不加,不会影响实际运行结果
- “export WORKON_HOME=$HOME/.virtualenv”,这一句便是指定 virtualenv 主工作目录的位置,之后所有的虚拟环境都将建立在“.virtualenv”这个父目录的子目录内,以笔者为例即“/.virtualenv/cv”
- “export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3”,这一句是便是指定 virtualenv 的 python3 路径,即我们在准备工作第一步的时候输入“whereis python3”所获取 python3 所在的路径
- “export VIRTUALENVWRAPPER_VIRTUALENV=$HOME/Library/Python/3.7/bin/virtualenv”,这一步是指定已经安装好的 virtualenv 虚拟环境的路径,在我们刚刚安装好 virtualenv 的时候在终端命令行有此安装路径的提示,即“/Users/xxx/Library/Python/3.7/bin”,不过我们是要指定 virtualenv 这个软件的位置而不是其文件夹位置,所以写成“/Users/xxx/Library/Python/3.7/bin/virtualenv”或者“$HOME/Library/Python/3.7/bin/virtualenv”
- “source $HOME/Library/Python/3.7/bin/virtualenvwrapper.sh”,这一步便是指定 virtualenvwrapper 的脚本文件位置,并使其立即生效
接着保存退出,然后在终端输入并执行:
source ~/.zshrc
使我们刚刚写入的环境变量 path 的命令生效,这样每次打开终端这些命令就会自行启动并生效,而不用每次打开终端都重新配置一遍;至此,整个 virtualenv 虚拟环境配置完毕,我们将进入下一步的测试环节。
虚拟环境测试:
我们需要测试刚才所安装的 virtualenv 是否能正常工作,这里笔者给出两种创建方法。
第1种,不包括系统原本的已安装模块的创建方法,我们需要在终端中输入:
$ mkvirtualenv cv -p python3
第2种,包括系统原本已安装模块的创建方法,我们则需在终端输入:
$ mkvirthalenv --system-site-packages cv -p python3
与第1种方法相比,这行命令只不过在创建时加入多一个参数“--system-site-packages”,即使用系统方便的包/模块,这样就在创建新的虚拟环境的时候把原本在系统中存在的包/模块一同移植到到新的虚拟环境中,便不需要重新安装了
注⚠️:“cv”为文件夹名称,笔者这里打算在这个虚拟环境内做opencv的开发因此命名为“cv”,各位可根据自身喜好来命名此文件夹(如 abc,123...等等)
然后我们会在终端看到类似如下提示:
created virtual environment CPython3.7.3.final.0-64 in 423ms
creator CPython3macOsFramework(dest=/Users/xxx/.virtualenv/cv, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/xxx/Library/Application Support/virtualenv/seed-app-data/v1.0.1)
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
virtualenvwrapper.user_scripts creating /Users/xxx/.virtualenv/cv/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/xxx/.virtualenv/cv/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/xxx/.virtualenv/cv/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/xxx/.virtualenv/cv/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/xxx/.virtualenv/cv/bin/get_env_details
系统会自动创建名为“cv”的文件夹,其位置位于“~/”(主)目录下的隐藏文件夹“.virtualenv”中,然后 virtualenv 虚拟环境会自动启动;以笔者的虚拟环境为例,在终端命令行的用户名前会看到一个小括号,括号里面显示“cv”,就像这样:
(cv) xxx @ Macbook_Pro_2018 in ~ $
注⚠️:“cv”只是笔者命名的文件夹名称,各位的括号里的名称为先前自行命名的文件夹名称
由于上面创建虚拟环境的命令执行完成后会自动进入当前虚拟环境,所以我们已经处在虚拟环境中了,我们来测试一下能否启动 Python3:
$ python3
如果 python3 成功启动,那么非常好,这意味着我们接下来可以舒服的在这个虚拟环境里工作了。
然后我们退出 python3 开发环境,使用如下命令:
>>> exit()
或者
>>> quit()
接着尝试退出整个虚拟环境,我们直接输入如下命令即可:
$ deactivate
然后我们就能看到命令行用户名前的小括号(cv)消失了,这样就代表我们已经退出了虚拟环境了。
在此,笔者再列出几条常用的命令;以笔者为例,如果需要重新进入刚刚的名叫“cv”的虚拟环境,或者已经拥有了多个虚拟环境,需要进入其中一个虚拟环境,那我们应当确认我们需要进入哪个虚拟环境,我们可以输入以下命令列出当前所有的虚拟环境名称:
$ lsvirtualenv
终端会打印出所有的虚拟环境名称,如:
cv
abc
123
如果我们需要进入“cv”虚拟环境,则直接使用如下命令即可进入该开发环境:
$ workon cv
注⚠️:这里的“cv”仍然是指虚拟环境目录名称,请大家自行修改为自己想进入的目录名称
Tips:
如果在这一步终端报错说找不到 preactivate 文件,则需要在进入的虚拟环境目录名称后面增加“/bin”,以笔者为例:
$ workon cv/bin
这样便可正常进入虚拟环境
如果希望复制虚拟环境 cv 到 abc 中,那么需要在终端中输入:
$ cpvitrualenv cv abc
终端会显示类似提示:
Copying cv as abc...
然后系统会自动将在虚拟环境 cv 下的工作目录拷贝一份到虚拟环境 abc 中
如果希望删除某一个指定的虚拟环境,则可以在终端输入:
$ rmvirtualenv cv
注⚠️:这里的“cv”仍然是指虚拟环境目录名称,请大家自行修改为自己想移除的虚拟环境目录名称
完成:
至此,所有安装以及后续测试 virtualenv 虚拟环境的工作全部完成,恭喜!!!
接下来便是在虚拟环境内安装各种模块然后开心的敲代码了~
写在最后:
这份教程是笔者经过多次踩坑攒经验总结出来的,虽然总体来说相对于网络上其他方法的安装顺序及方法大体相同,但是由于苹果更新到了最新的Catalina版本的系统,因此许多旧教程对新系统已不适用,此方法适用与 Catalina Version 10.15.4 甚至日后更高的系统版本。
笔者在这方面不算专业人士,只是爱好者级别,如果文中有哪些部分的解释有误,也还请大家多多指教!
最后,祝大家开发愉快!