当人们开始学习Python时,他们经常会遇到一个想要使用的包,而通常都会以“pip install”来安装它。这个建议的问题是,它是一个非常简单的管理包的观点,并且实际上会导致将来出现问题。虽然在packaging.python.org上有一个关于安装包的教程,但是对于想快速上手并继续的一些人来说可能会有点让人生畏。


如果你只是想要开始使用Python,并且想要避免在全局安装包的陷阱,那么你只需要3个步骤就可以做正确的事情。


总结

  1. 创建一个虚拟环境,例如:python3.8 -m venv .venv(如有必要,使用py -3.8代替python3.8)

  2. 激活虚拟环境,例如:source .venv/bin/activate.fish(假设你使用的是fish shell)

  3. 安装你想要的包,例如:python -m pip install --upgrade pip——如果你想安装最新版本的pip的话(你可能已经安装了)


请注意,下面解释了步骤1的一个更高级的版本。本文还涉及了其他shell的步骤2的版本。


细节


步骤1:创建一个虚拟环境


第一步是创建一个虚拟环境。你想要这样做是因为你希望将安装的包与你的全局Python安装隔离开来。由于Python已被广泛地用于运行操作系统,现在如果你直接安装到你的全局解释器中,那你实际上会破坏你的操作系统。所以,请始终使用某种形式的隔离环境(我将使用虚拟环境,因为它们内置在Python本身中,它们是轻量级的,而且VS Code对它们也有了很好的支持)。


我还想说,在创建虚拟环境时,你应该始终指定想要的Python的特定版本。你将会注意到下面我使用的是python3.9或python3.8这样的命令,而不仅仅是python3。这是为了确保你得到你想要的Python版本。


另外,不要将你的虚拟环境提交到版本控制系统。如果你要确保自己不这样做,那么下面的命令将创建一个.venv目录,你可以将一个只包含 * 的.gitignore文件放入其中(如果你使用的是UNIX,你可以在创建虚拟环境之后,使用echo "*" > .venv/.gitignore来做到这一点)。


最后,你会注意到我在下面使用了--prompt标志。它完全是可选的,并且在任何操作系统上都是可以省略的。它所做的只是通过给你的虚拟环境提供当前目录的基本名称,使你接下来的步骤2的shell提示信息更丰富一些,所以这是一个很好的操作,但是如果你不想使用该标记,那它也不会影响任何东西。


对Debian/Ubuntu用户的警告


如果你使用的是一个基于Debian的操作系统(例如Ubuntu),并且你使用的是操作系统安装的Python版本,请确保通过apt安装python3-venv。如果你是从python.org或其他方式安装的,那你很可能就已经具备了你所需要的东西。


对Windows用户的提示


下面我使用了py,因为它是python.org安装程序附带的。如果你由于某种原因没有安装它,那么也不要担心,例如,用python3.8代替py -3.8即可。


Python 3.9及更新版本


在写这篇文章的时候,Python 3.9还没有出来,但是它将在2020年10月发布,希望到那时这篇博文还在,所以我将介绍一个将要发布的简洁的新特性,它使得--prompt更易于使用。


UNIX

Windows


Python 3.8 和更老版本


fish shell


bash shell


PowerShell



步骤2: 激活虚拟环境


激活你的虚拟环境可以使你在键入python时,它将指向你的虚拟环境中的解释器(以及使你以后安装的任何包安装的任何工具可用)。这一步完全是可选的,但是却非常方便。如果你在步骤1中使用了--prompt,那么你的shell提示符将显示包含虚拟环境的目录名,以提醒你python指向的是什么。


如果在任何时候你想关闭你的shell的激活状态,你可以运行deactivate(关闭/退出你的shell也可以,因为激活不是永久的)。


fish shell

bash shell

PowerShell


你会注意到这里有两个命令。第一个命令只需要运行一次,它会降低PowerShell的安全级别,从而允许已经签名的PowerShell脚本执行,但是这些脚本的签名密钥没有安装在要运行的操作系统中(Python 3.8的激活脚本由Python软件基金会进行签名)。如果你不运行这个命令,你会得到一个错误。这没什么大不了的,你仍然可以继续根据需要改变执行策略。



步骤3:安装软件包


如果你已经看到过“只是”运行pip来安装某些东西的指南,你可能会注意到我下面的建议有些不同。我有一篇关于原因的完整的博文,但是简短的答案是,你希望确保你正在安装到你的虚拟环境中,而不是偶然地安装到了你的Python的全局环境中(这也是这篇博文的前两个步骤存在的全部原因)。


我还使用pip作为示例项目来使用一个额外的--upgrade标志进行安装,以便你在虚拟环境中升级pip。与默认安装的版本相比,可能会有一个新的pip版本可用,因此这不仅是一个示例,而且对你也很有用。另外,这也是一种确保你的虚拟环境按预期正常工作的简单方法。


如果你激活了你的环境



如果你没有激活你的环境

UNIX

Windows


就是这样!


按照上面的步骤,你最终会得到:


  1. 一个虚拟环境,它会将你安装的东西与Python的全局安装隔离开来

  2. 一个为虚拟环境激活的shell,以便你更容易地使用Python

  3. 一个pip的更新安装


如果在任何时候你不再需要你的虚拟环境了,你可以简单地删除该环境所在的.venv目录。如果你以后想使用较新的Python版本,你只需删除该.venv目录,并创建一个新的虚拟环境(它们注定是一次性的东西)。记住不要将你的虚拟环境提交给源码控制系统。


请注意,如果这不是一个用于实验的一次性的虚拟环境,有一些方法可以帮助你长期正确地管理你的包依赖关系。这个话题值得在另一篇博文中讨论,所以我在这里就不打算深究了。你只需要知道,如果你所做的工作需要持久化,那么你将需要使用一些工具来帮助你跟踪代码所依赖的包。


我也完全承认这篇博文是武断的。它短小精悍,是我用来快速入门和继续的首选方式。请注意,如果你愿意,有一些工具可以帮助你自动化这三个步骤。除了虚拟环境之外,还有其他可能更适合你需要的替代隔离环境。在Python社区中,我们非常幸运地拥有这么多热诚的用户,如果有些东西让人感到尴尬,那么某个人可能就已经提出了一个可以改善你的体验的解决方案,。


英文原文:https://snarky.ca/a-quick-and-dirty-guide-on-how-to-install-packages-for-python/
译者:天天向上