MacOS 系统中如何设置 Python 虚拟环境 | Linux 中国

2019 年 7 月 11 日 Linux中国
使用 pyenv 和 virtualwrapper 来管理你的虚拟环境,可以避免很多困惑。
-- Matthew Broberg

作为 Python 开发者和 MacOS 用户,拿到新机器首先要做的就是设置 Python 开发环境。下面是最佳实践(虽然我们已经写过 在 MacOS 上管理 Python 的其它方法)。

预备

首先,打开终端,在其冰冷毫无提示的窗口输入 xcode-select --install 命令。点击确认后,基本的开发环境就会被配置上。MacOS 上需要此步骤来设置本地开发实用工具库,根据 OS X Daily 的说法,其包括 ”许多常用的工具、实用程序和编译器,如 make、GCC、clang、perl、svn、git、size、strip、strings、libtool、cpp、what 及许多在 Linux 中系统默认安装的有用命令“。

接下来,安装 Homebrew, 执行如下的 Ruby 脚本。

   
   
     
  1. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果你像我一样,对随意就运行的来源于互联网的脚本心存疑虑的话,可以点击上面的脚本去仔细看看其具体功能。

一旦安装完成后,就恭喜了,你拥有了一个优秀的包管理工具。自然的,你可能接下来会执行 brew install python 或其他的命令。不要这样,哈哈!Homebrew 是为我们提供了一个 Python 的管理版本,但让此工具来管理我们的 Python 环境话,很快会失控的。我们需要 pyenv,一款简单的 Python 版本管理工具,它可以安装运行在 许多操作系统 上。运行如下命令:

   
   
     
  1. $ brew install pyenv

想要每次打开命令提示框时 pyenv 都会运行的话,需要把下面的内容加入你的配置文件中(MacOS 中默认为 .bash_profile,位于家目录下):

   
   
     
  1. $ cd ~/
  2. $ echo 'eval "$(pyenv init -)"' >> .bash_profile

添加此行内容后,每个终端都会启动 pyenv 来管理其 PATH 环境变量,并插入你想要运行的 Python 版本(而不是在环境变量里面设置的初始版本。更详细的信息,请阅读 “如何给 Linux 系统设置 PATH 变量”)。打开新的终端以使修改的 .bash_profile 文件生效。

在安装你中意的 Python 版本前,需要先安装一些有用的工具,如下示:

   
   
     
  1. $ brew install zlib sqlite

pyenv 依赖于 zlib 压缩算法和 SQLite 数据库,如果未正确配置,往往会导致构建问题。将这些导出配置命令加入当前的终端窗口执行,确保它们安装完成。

   
   
     
  1. $ export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/sqlite/lib"
  2. $ export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/sqlite/include"

现在准备工作已经完成,是时候安装一个适合于现代人的 Python 版本了:

   
   
     
  1. $ pyenv install 3.7.3

去喝杯咖啡吧,挑些豆类,亲自烧烤,然后品尝。说这些的意思是上面的安装过程需要一段时间。

添加虚拟环境

一旦完成,就可以愉快地使用虚拟环境了。如没有接下来的步骤的话,你只能在你所有的工作项目中共享同一个 Python 开发环境。使用虚拟环境来隔离每个项目的依赖关系的管理方式,比起 Python 自身提供的开箱即用功能来说,更加清晰明确和更具有重用性。基于这些原因,把 virtualenvwrapper 安装到 Python 环境中吧:

   
   
     
  1. $ pyenv global 3.7.3
  2. # Be sure to keep the $() syntax in this command so it can evaluate
  3. $ $(pyenv which python3) -m pip install virtualenvwrapper

再次打开 .bash_profile 文件,把下面内容添加进去,使得每次打开新终端时它都有效:

   
   
     
  1. # We want to regularly go to our virtual environment directory
  2. $ echo 'export WORKON_HOME=~/.virtualenvs' >> .bash_profile
  3. # If in a given virtual environment, make a virtual environment directory
  4. # If one does not already exist
  5. $ echo 'mkdir -p $WORKON_HOME' >> .bash_profile
  6. # Activate the new virtual environment by calling this script
  7. # Note that $USER will substitute for your current user
  8. $ echo '. ~/.pyenv/versions/3.7.3/bin/virtualenvwrapper.sh' >> .bash_profile

关掉终端再重新打开(或者运行 exec /bin/bash -l 来刷新当前的终端会话),你会看到 virtualenvwrapper 正在初始化环境配置:

   
   
     
  1. $ exec /bin/bash -l
  2. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/premkproject
  3. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postmkproject
  4. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/initialize
  5. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/premkvirtualenv
  6. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postmkvirtualenv
  7. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/prermvirtualenv
  8. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postrmvirtualenv
  9. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/predeactivate
  10. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postdeactivate
  11. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/preactivate
  12. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postactivate
  13. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/get_env_details

从此刻开始,你的所有工作都是在虚拟环境中的,其允许你使用临时环境来安全地开发。使用此工具链,你可以根据工作所需,设置多个项目并在它们之间切换:

   
   
     
  1. $ mkvirtualenv test1
  2. Using base prefix '/Users/moshe/.pyenv/versions/3.7.3'
  3. New python executable in /Users/moshe/.virtualenvs/test1/bin/python3
  4. Also creating executable in /Users/moshe/.virtualenvs/test1/bin/python
  5. Installing setuptools, pip, wheel...
  6. done.
  7. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/predeactivate
  8. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/postdeactivate
  9. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/preactivate
  10. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/postactivate
  11. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/get_env_details
  12. (test1)$ mkvirtualenv test2
  13. Using base prefix '/Users/moshe/.pyenv/versions/3.7.3'
  14. New python executable in /Users/moshe/.virtualenvs/test2/bin/python3
  15. Also creating executable in /Users/moshe/.virtualenvs/test2/bin/python
  16. Installing setuptools, pip, wheel...
  17. done.
  18. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/predeactivate
  19. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/postdeactivate
  20. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/preactivate
  21. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/postactivate
  22. virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/get_env_details
  23. (test2)$ ls $WORKON_HOME
  24. get_env_details postmkvirtualenv premkvirtualenv
  25. initialize postrmvirtualenv prermvirtualenv
  26. postactivate preactivate test1
  27. postdeactivate predeactivate test2
  28. postmkproject premkproject
  29. (test2)$ workon test1
  30. (test1)$

此处,使用 deactivate 命令可以退出当前环境。

推荐实践

你可能已经在比如 ~/src 这样的目录中添加了长期的项目。当要开始了一个新项目时,进入此目录,为此项目增加子文件夹,然后使用强大的 Bash 解释程序自动根据你的目录名来命令虚拟环境。例如,名称为 “pyfun” 的项目:

   
   
     
  1. $ mkdir -p ~/src/pyfun && cd ~/src/pyfun
  2. $ mkvirtualenv $(basename $(pwd))
  3. # we will see the environment initialize
  4. (pyfun)$ workon
  5. pyfun
  6. test1
  7. test2
  8. (pyfun)$ deactivate
  9. $

当需要处理此项目时,只要进入该目录,输入如下命令重新连接虚拟环境:

   
   
     
  1. $ cd ~/src/pyfun
  2. (pyfun)$ workon .

初始化虚拟环境意味着对 Python 版本和所加载的模块的时间点的拷贝。由于依赖关系会发生很大的改变,所以偶尔需要刷新项目的虚拟环境。这种情况,你可以通过删除虚拟环境来安全的执行此操作,源代码是不受影响的,如下所示:

   
   
     
  1. $ cd ~/src/pyfun
  2. $ rmvirtualenv $(basename $(pwd))
  3. $ mkvirtualenv $(basename $(pwd))

这种使用 pyenv 和 virtualwrapper 管理虚拟环境的方法可以避免开发环境和运行环境中 Python 版本的不一致出现的苦恼。这是避免混淆的最简单方法 - 尤其是你工作的团队很大的时候。

如果你是初学者,正准备配置 Python 环境,可以阅读下 MacOS 中使用 Python 3 文章。你们有关于 Python 相关的问题吗,不管是初学者的还是中级使用者的?给我们留下评论信息,我们在下篇文章中会考虑讲解。


via: https://opensource.com/article/19/6/virtual-environments-python-macos

作者:Matthew Broberg 选题:lujun9972 译者:runningwater 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

😻:还 在看吗?


 

登录查看更多
0

相关内容

Mac OS X (OS X, macOS) 是一套 Unix 基础的操作系统,包含两个主要的部份:名为 Darwin,以 FreeBSD 源代码和 Mach 微核心为基础,由苹果公司和独立开发者社区协力开发的核心;及一个由苹果计算机开发,名为 Aqua 之专有版权的图形用户界面。 苹果公司先后为 Mac PC 电脑开发了 System vX.X、Mac OS 8、Mac OS 9 及 Mac OS X (OS X, macOS) 等操作系统。Mac OS X 于 2001 年首次在市场上推出,并从 2002 年起随麦金塔计算机发售。2012 年更名为 OS X,在 2016 年再次更名为 macOS。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
254+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
18+阅读 · 2019年10月28日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
从零开始:深度学习软件环境安装指南
机器之心
5+阅读 · 2017年10月2日
开源 | 基于Python的人脸识别:识别准确率高达99.38%!
全球人工智能
4+阅读 · 2017年7月29日
A Survey on Bayesian Deep Learning
Arxiv
60+阅读 · 2020年7月2日
Deep Learning for Deepfakes Creation and Detection
Arxiv
6+阅读 · 2019年9月25日
Learning Implicit Fields for Generative Shape Modeling
Arxiv
10+阅读 · 2018年12月6日
Arxiv
135+阅读 · 2018年10月8日
Arxiv
7+阅读 · 2018年6月1日
Arxiv
7+阅读 · 2018年1月31日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关VIP内容
相关资讯
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
18+阅读 · 2019年10月28日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
从零开始:深度学习软件环境安装指南
机器之心
5+阅读 · 2017年10月2日
开源 | 基于Python的人脸识别:识别准确率高达99.38%!
全球人工智能
4+阅读 · 2017年7月29日
相关论文
A Survey on Bayesian Deep Learning
Arxiv
60+阅读 · 2020年7月2日
Deep Learning for Deepfakes Creation and Detection
Arxiv
6+阅读 · 2019年9月25日
Learning Implicit Fields for Generative Shape Modeling
Arxiv
10+阅读 · 2018年12月6日
Arxiv
135+阅读 · 2018年10月8日
Arxiv
7+阅读 · 2018年6月1日
Arxiv
7+阅读 · 2018年1月31日
Arxiv
3+阅读 · 2012年11月20日
Top
微信扫码咨询专知VIP会员