使用 pipenv 设置 Python 开发环境
其他有用的 pipenv 命令
什么是 pipenv?
照片来源:Make a Mem.org
根据官方文档,“ Pipenv是一个旨在将所有打包工具(bundler、composer、npm、cargo、yarn 等)的最佳功能引入 Python 世界的工具。” “它将 Pipfile、pip 和 virtualenv 整合到一个命令中。”
这是什么意思?
照片来源:Make a Mem.org
首先,我们需要了解什么是包管理器。包管理器是一种帮助管理(安装、卸载和升级)软件包或模块的工具。如果您之前使用过 Node.js,那么您一定用过 NPM(Node 包管理器),它用于管理您在 Node 上使用的 JavaScript 模块。pipenv 的作用是像 NPM 一样,帮助您管理用于构建项目的 Python 包。
Pipenv 的工作原理是创建一个虚拟环境,用于隔离你为项目安装的不同软件包。在 pipenv 之前,还有其他 Python 包管理器用于创建虚拟环境,例如 virtualenv,但它们也存在各自的问题。
为什么是虚拟环境?
你好!我叫 Pip。我是 Python 的标准包管理器。我可以帮你安装和卸载 Python 包。不过,我会在你的系统环境的全局范围内安装它们。
为什么这是一个问题?
想象一下,你的电脑上有大约 5 个 Django 项目,每个项目都使用各自版本的 Django,而每个版本的 Django 又各自依赖不同的版本。如果你真的跟着我一起想象,你很快就会意识到这些依赖项之间必然存在冲突。也许,某个依赖项的较低版本会被覆盖,导致你的某个应用程序崩溃,而这可不是你想要的。
一个简单的解决方案是为每个项目创建一个隔离层,使它们彼此之间互不干扰,从而避免 Django 内战。这时,虚拟环境就派上用场了。
在同一个项目的软件开发团队中,共享一个文件来描述运行应用程序所需的所有软件包,这是一种常见的做法。Pip 使用一个 requirement.txt 文件。然而,这样做也带来了一些问题。
requirements.txt 文件不会记录正在安装的软件包的具体版本。这可能会导致将来出现问题,因为运行“pip install”会获取软件包的最新版本,这可能会导致应用程序崩溃。虽然可以通过固定(手动指定)版本来解决此问题,但这不适用于软件包的依赖项,因为它们记录在 requirements.txt 文件中。
让我更清楚地解释一下——假设你用 pip 安装了两个软件包(p1 v.0.01 和 p2 v.0.02)。这两个软件包各自有依赖关系。只有上述软件包会记录在 requirements.txt 文件中。因此,即使它们没有升级到最新版本,它们的依赖关系也不会被固定,因此可能会被升级,从而导致应用程序崩溃。
为什么使用 pipenv
-
Pipenv 通过为运行每个单独的项目创建虚拟环境来解决上述问题,因此它们的包和依赖项不会发生冲突。
-
其次,pipenv 使用 pipfile 和 pipfile.lock 文件管理已安装软件包及其依赖项的记录。pipfile 跟踪所有已安装的软件包,而 pipfile.lock 文件跟踪它们的依赖项。pipenv 的有趣之处在于,即使尚未使用 pipenv,也可以轻松生成 requirements.txt 文件。
-
过去,我们有其他用于创建虚拟环境的软件包来帮助解决这个问题,其中之一就是 virtualenv 软件包,但它的设置和使用有点繁琐。Pipenv 可以让你更轻松地管理软件包。它结合了 pip 和 virtualenv 来为你的项目创建虚拟环境。
Image Source: https://docs.pipenv.org/en/latest/
闲话少叙,我们开始吧。 图片来源:imgflip
设置 pipenv
为了演示 pipenv 的工作原理,我们将搭建一个基本的 Django 项目。但为此,我们需要安装 python 和 pip。
安装python3
我们将安装 Python 的最新版本 python3。最简单的方法是访问https://www.python.org/downloads/,下载适用于您操作系统的软件包并安装。本文将使用 Mac OSX 环境。您也可以通过终端安装 Python,步骤如下:
-
如果您尚未安装 Xcode,请访问应用商店进行安装:https://apps.apple.com/us/app/xcode/id497799835。安装完成后,打开终端并输入以下代码:xcode-select --install
-
如果尚未安装 homebrew,请通过在终端上运行以下代码来安装它: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) "
安装过程完成后,您可以输入以下命令which brew
查看 Homebrew 的安装位置。Homebrew 是 Mac 的软件包管理器,您的输出应该类似于以下内容:
- 安装 python 3。要安装 python3,请运行 brew install python3
在我的电脑上显示我已经安装了python3,还显示了我安装的python3的版本。
要验证是否已安装 python3,请在终端上输入:which python3
当您使用 homebrew 安装 python3 时,它会自动安装 pip3您可以通过运行或来
验证 pip3 是否已安装which pip3
pip3 --version
安装 pipenv
要安装 pipenv,请运行 Pip3 install pipenv
如果您查看屏幕截图中的输出,您会看到一些地方显示“要求已满足” - 这是因为我已经安装了 virtualenv,并且记得我告诉过您 pipenv 可以与 virtualenv 和 pip 一起使用。
我们目前处于什么样的环境?
当我运行“pip3 freeze”时,你会看到它显示了我当前环境(即全局环境)中所有的包。当我们在虚拟环境中运行相同的命令,并且没有安装任何包时,你很快就会看到区别。
启动虚拟环境
要创建我们的虚拟环境,我们必须为我们的项目创建一个目录并在该目录中运行命令。
查看上面的屏幕截图,您会发现我运行了以下命令:
mkdir project_1
- 创建一个新的项目目录cd project_1
- 将我当前的工作目录更改为我刚刚创建的新目录pipenv shell
- 创建一个新的虚拟环境,您会注意到该环境已成功创建。
验证我们所处的环境
要验证我们是否已更改环境,请运行pip3 freeze again
: 与之前的输出不同,您会注意到没有结果。这是因为我们不再处于全局范围内,并且在这个新环境中,我们尚未安装任何应用程序。此外,如果您检查项目目录,您会注意到已创建了一个新的 Pipfile。
pipfile 使用一种名为 TOML(Tom's Obvious Minimal Language)的配置语言编写。它旨在编写易于阅读的配置文件。我们不会费心阅读前四行。
- 第 6 行列出了仅用于开发目的的软件包。这些软件包不会安装在生产环境中,只会安装在测试和开发环境中。
- 第 8 行表示将列出基于生产的软件包的部分
- 第 11 行表示所使用或所需的 python 版本。
- 请注意,您可以手动将包添加到此文件,然后
pipenv install
在终端上运行以安装它们。
现在,让我们安装一个新的包,看看会发生什么。我们将安装 Django
你会注意到我没有指定要安装的 Django 版本。你还会注意到,它搜索了 Pipfile.lock 文件,并在找不到时创建了一个。
在我们的代码编辑器中,您还会发现 Django 已添加到软件包列表中。版本号用星号指定。这意味着,每当有人运行 pipenv install 时,它都会安装最新版本。我们也可以将星号更改为所需的版本。您还会注意到生成了一个 piplefile.lock 文件。该文件跟踪所有已安装的软件包及其依赖项。
我们还可以做一件事,再次运行 pip3 freeze 命令。你会注意到,这里只列出了 pipfile.lock 文件中列出的包。
检查当前环境
您可以键入以下命令来验证您所处的环境:
Python
- 这应该会启动 python shell,如下图所示。Import sys
- 导入 sys 模块Sys.excutable
- 这应该打印出你正在运行的当前 Python 环境的路径- 键入
exit()
- 退出 python shell 键入exit
- 退出环境。 - 重复前三个命令,你会发现输出有所不同。这是因为目前 Mac 已经预装了 Python 2.7。由于你不再处于你创建的虚拟环境中,所以输出会有所不同。你也可以运行 pip3 freeze
测试我们的 Django 安装
- 确保你位于创建环境的目录中
- 输入
pipenv shell
- 激活环境 - 运行
django-admin startproject bookstore .
- 末尾的句点 (.) 表示应该将其安装在当前目录中,并将项目命名为 bookstore。命令执行后,您可能看不到任何输出。 - 在终端中输入
ls
,你会看到一个名为 bookstore 的新目录已创建。你还会注意到另一个名为 manage.py 的文件。
运行 Django 应用
要运行 Django 应用程序,请在终端上输入以下命令:
python manage.py runserver
- 复制终端中突出显示的 URL,将其粘贴到浏览器地址栏上,然后按 Enter 键运行它。
现在你有了你的 Django 应用程序
requirements.txt 文件
如前所述,requirements.txt 文件用于记录使用 pip 时已安装的软件包。如果您需要与使用 pip 而不是 pipenv 的人合作,您可以与他们共享一个 requirements.txt 文件:
创建 requirements.txt 文件
- 运行
pipenv lock -r
命令显示已安装包的列表。 - 复制上述命令的输出,粘贴到 requirements.txt 文件中,并将其推送到你的项目仓库。其他开发人员只需运行
pip install
,即可安装所有软件包及其依赖项。
生成你自己的 pipfile.lock
如果你有 requirements.txt 文件,你可以生成 pipfile.lock
- 将 requirements.txt 文件放入你的项目目录中
- 跑步
pipenv lock
- 运行
pipenv install --ignore-pipfile
- 这将使用 pipfile.lock 安装所有包及其依赖项,并忽略 pipfile。
其他有用的 pipenv 命令
列出当前环境中安装的包
-
环境变量
您还可以将环境变量添加到您的项目中- 创建 .env 文件
- 为其添加环境变量
- PASSWORD='我的秘密密码'
pipenv run python
您将看到环境变量正在加载 Import os os.environ['PASSWORD']
希望你喜欢我的教程。请留下你的反馈,以便我更好地分享。记得点赞和分享,这样其他人也能从中学习。
鏂囩珷鏉ユ簮锛�https://dev.to/davidshare/setting-up-a-python-development-environment-with-pipenv-3lfj