Pipenv和虚拟环境

../_images/35294660055_42c02b2316_k_d.jpg

本教程将指导您安装和使用Python包。

它将向您展示如何安装和使用必要的工具,并就最佳实践提出强有力的建议。请记住,python用于许多不同的目的,并且您想要管理依赖关系的方式可能会根据您决定发布软件的方式而改变。这里给出的指南最直接地适用于网络服务(包括Web应用程序)的开发和部署,但也非常适合于管理任何类型项目的开发和测试环境。

备注

本指南是为Python 3编写的,但是,如果您出于某种原因仍在使用Python 2.7,那么这些说明应该可以很好地工作。

确保你有Python&pip

在继续之前,请确保您有Python,并且它可以从命令行中使用。您可以通过运行以下命令来检查:

$ python --version

你应该得到一些输出,比如 3.6.2。如果没有Python,请从安装最新的3.x版本 python.org 或参考 Installing Python 本指南的章节。

备注

如果您是新来者,并且出现如下错误:

>>> python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'python' is not defined

这是因为这个命令是在 (也称为 终端慰问 )。初学者看 Python 入门教程 介绍如何使用操作系统的shell并与Python交互。

此外,您还需要确保 pip 可用。您可以通过运行:

$ pip --version

如果从源代码安装了python,则安装程序来自 python.org ,或通过 Homebrew 你应该已经有了pip。如果您使用Linux并使用OS软件包管理器安装,则可能需要 install pip 分别地。

安装Pipenv

Pipenv 是Python项目的依赖关系管理器。如果您熟悉node.js' npm 或者鲁比的 bundler 它在精神上与那些工具相似。当 pip 可以安装python包,建议使用pipenv,因为它是一个高级工具,可以简化常见用例的依赖关系管理。

使用 pip 要安装Pipenv:

$ pip install --user pipenv

备注

这是一个 user installation 以防止破坏任何系统范围的包。如果 pipenv 安装后Shell中不可用,您需要添加 user base 的二进制目录 PATH

在Linux和MacOS上,您可以通过运行 python -m site --user-base 并添加 bin 到最后。例如,这通常会打印 ~/.local (与 ~ 扩展到主目录的绝对路径),因此需要添加 ~/.local/bin 对你 PATH。你可以设置你的 PATH 永久 modifying ~/.profile

在Windows上,您可以通过运行 py -m site --user-site 并更换 site-packages 具有 Scripts。例如,这可能返回 C:\Users\Username\AppData\Roaming\Python36\site-packages 所以你需要设置 PATH 包括 C:\Users\Username\AppData\Roaming\Python36\Scripts。您可以设置您的用户 PATH 永久在 Control Panel。您可能需要注销 PATH 更改生效。

为项目安装包

Pipenv基于每个项目管理依赖项。要安装软件包,请更改到项目的目录(或仅此教程的空目录),然后运行:

$ cd project_folder
$ pipenv install requests

Pipenv将安装 Requests 库并创建 Pipfile 在项目目录中。这个 Pipfile 用于跟踪项目需要哪些依赖项,以防需要重新安装它们,例如与其他人共享项目时。您应该得到与此类似的输出(尽管显示的确切路径会有所不同):

Creating a Pipfile for this project...
Creating a virtualenv for this project...
Using base prefix '/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6'
New python executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python3.6
Also creating executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: ~/.local/share/virtualenvs/tmp-agwWamBd
Installing requests...
Collecting requests
  Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests)
  Using cached idna-2.6-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Installing collected packages: idna, urllib3, chardet, certifi, requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22

Adding requests to Pipfile's [packages]...
P.S. You have excellent taste! ✨ 🍰 ✨

使用已安装的软件包

现在安装了请求,您可以创建一个简单的 main.py 要使用的文件:

import requests

response = requests.get('https://httpbin.org/ip')

print('Your IP is {0}'.format(response.json()['origin']))

然后可以使用 pipenv run

$ pipenv run python main.py

您应该得到类似这样的输出:

Your IP is 8.8.8.8

使用 $ pipenv run 确保已安装的包对脚本可用。还可以生成一个新的shell,以确保所有命令都可以通过 $ pipenv shell

下一步

恭喜您,您现在知道如何安装和使用python包了!_

下层:virtualenv

virtualenv 是创建独立的Python环境的工具。virtualenv创建一个文件夹,其中包含使用Python项目需要的包所需的所有可执行文件。

它可以独立使用,代替pipenv。

通过PIP安装virtualenv:

$ pip install virtualenv

测试安装:

$ virtualenv --version

基本用法

  1. 为项目创建虚拟环境:

$ cd project_folder
$ virtualenv venv

virtualenv venv 将在当前目录中创建一个文件夹,其中包含python可执行文件和 pip 可用于安装其他软件包的库。虚拟环境的名称(在本例中,它是 venv )可以是任何内容;省略名称将把文件放在当前目录中。

备注

“venv”是全球通用的惯例。因为它很容易在忽略文件中使用(例如:.gitignore')

这将在运行命令的目录中创建一个python副本,并将其放在名为 venv .

您也可以使用您选择的python解释器(例如 python2.7

$ virtualenv -p /usr/bin/python2.7 venv

或使用中的env变量全局更改解释器 ~/.bashrc

$ export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7
  1. 要开始使用虚拟环境,需要激活它:

$ source venv/bin/activate

当前虚拟环境的名称现在将显示在提示的左侧(例如 (venv)Your-Computer:project_folder UserName$ )让你知道它是活动的。从现在开始,使用pip安装的任何包都将放置在 venv 文件夹,与全局python安装隔离。

对于Windows,可以使用步骤1中提到的相同命令创建虚拟环境。但是,激活环境需要稍微不同的命令。

假设您在项目目录中:

C:\Users\SomeUser\project_folder> venv\Scripts\activate

使用安装包 pip 命令:

$ pip install requests
  1. 如果暂时在虚拟环境中完成了工作,则可以将其停用:

$ deactivate

这将使您回到系统的默认python解释器及其所有已安装的库中。

要删除虚拟环境,只需删除其文件夹。(在这种情况下, rm -rf venv

不过,过了一段时间,您可能会在整个系统中出现大量的虚拟环境,而且您可能会忘记它们的名称或放置位置。

备注

Python包含了3.3版的venv模块。有关详细信息: venv .

其他音符

运行 virtualenv 有选择权 --no-site-packages 不包括全局安装的包。如果以后需要访问包列表,这对于保持包列表的整洁很有用。 [This is the default behavior for virtualenv 1.7 and later.]

为了保持环境的一致性,最好“冻结”环境包的当前状态。要执行此操作,请运行:

$ pip freeze > requirements.txt

这将创建一个 requirements.txt 文件,其中包含当前环境中所有包及其各自版本的简单列表。您可以查看已安装包的列表,而不使用 pip list .稍后,不同的开发人员(或者您,如果需要重新创建环境)可以更容易地使用相同的版本安装相同的软件包:

$ pip install -r requirements.txt

这有助于确保跨安装、跨部署和跨开发人员的一致性。

最后,请记住,通过将虚拟环境文件夹添加到忽略列表中,将其从源代码管理中排除(请参见 Version Control Ignores

virtualenvwrapper

virtualenvwrapper 提供一组命令,使在虚拟环境中工作更加愉快。它还将所有虚拟环境放在一个地方。

安装(确保 虚拟现实 已安装):

$ pip install virtualenvwrapper
$ export WORKON_HOME=~/Envs
$ source /usr/local/bin/virtualenvwrapper.sh

(Full virtualenvwrapper install instructions

对于Windows,可以使用 virtualenvwrapper-win

安装(确保 虚拟现实 已安装):

$ pip install virtualenvwrapper-win

在Windows中,Workon主页的默认路径是%userprofile%\envs

基本用法

  1. 创建虚拟环境:

$ mkvirtualenv project_folder

这就产生了 project_folder 文件夹在里面 ~/Envs

  1. 在虚拟环境中工作:

$ workon project_folder

或者,您可以创建一个项目,该项目创建虚拟环境,并且在其中创建一个项目目录 $WORKON_HOME ,这就是 cd -当你 workon project_folder

$ mkproject project_folder

虚拟环境包装 提供环境名称的制表符完成。当你有很多环境,而且记不住他们的名字时,这真的很有帮助。

workon 还可以停用当前所在的任何环境,以便在环境之间快速切换。

  1. 停用仍然相同:

$ deactivate
  1. 要删除:

$ rmvirtualenv venv

其他有用的命令

lsvirtualenv

列出所有环境。

cdvirtualenv

导航到当前激活的虚拟环境的目录,以便浏览其 site-packages 例如。

cdsitepackages

和上面一样,但是直接进入 site-packages 目录。

lssitepackages

显示的内容 site-packages 目录。

virtualenvwrapper命令的完整列表<https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html> _。

virtualenv-burrito

virtualenv-burrito ,您可以在单个命令中拥有一个工作的virtualenv+virtualenwrapper环境。

direnv

当你 cd 到包含 .envdirenv 自动激活环境。

在Mac OS X上使用 brew

$ brew install direnv

在Linux上,请按照以下位置的说明操作 direnv.net