一、课件

二、习题

习题答案:

A C AB C B

78略

9 into单步 over跳过函数内部

10略

三、pipenv基本使用

☤ Pipenv工作流示例

克隆、创建一个项目仓库:

$ cd myproject

如果已经有一个Pipfile,从Pipfile安装:

$ pipenv install

或者,添加一个包到你的项目中:

$ pipenv install <package>

如果 Pipfile 不存在会创建一个。否则,它的内容会自动更新加入新的包。

接下来,激活Pipenv的终端:

$ pipenv shell
$ python --version

这会启动一个新的终端进程,可以通过 exit 来退出。

☤ Pipenv升级工作流示例

  • 查看上游更新的内容: $ pipenv update --outdated
  • 升级包版本,有两种方法:
    1. 想要升级所有依赖包?只需要 $ pipenv update 。
    2. 想要一个个升级包?对每一个包 $ pipenv update <pkg> 。

☤ 从requirements.txt中导入

如果你运行 pipenv install 时只有一个 requirements.txt,pipenv会自动将文件内容导入进来为你创建一个 Pipfile 。

你也可以指定 $ pipenv install -r path/to/requirements.txt 导入某个requirements文件。

如果你的requirements文件中锚定了版本号,你可能需要编辑新的 Pipfile 去掉它们,让 pipenv 去管理版本。如果你需要保持 Pipfile.lock 中锚定的版本不变,运行 pipenv lock --keep-outdated 。别忘了立刻 更新 !

☤ 指定包的版本

你可以使用 语义版本规范 指定包的版本(如: major.minor.micro)。

例如,安装requests你可以用::

$ pipenv install requests~=1.2

Pipenv会安装 1.2 版本以及后续所有的次版本更新,但不包括 2.0 。

这会自动更新你的 Pipfile 一反映最新变化。

一般来说,Pipenv和pip使用相同的版本标识。但注意到 PEP 440 ,你不能使用包含连字符与加号的版本。

要用包含与不包含的版本比较你可以用::

$ pipenv install "requests>=1.4"   # will install a version equal or larger than 1.4.0
$ pipenv install "requests<=2.13"  # will install a version equal or lower than 2.13.0
$ pipenv install "requests>2.19"   # will install 2.19.1 but not 2.19.0

注解

高度推荐用双引号包裹包版本标识(如 "requests>2.19"),这是为了避免在基于Unix的操作系统中出现 输入输出重定向问题 。

~= 比 == 标识符更加推荐,因为后者会使得pipenv无法更新包::

$ pipenv install "requests~=2.2"  # locks the major version of the package (this is equivalent to using ==2.*)

要防止安装包的某个版本可以使用 != 标识符。

想要获得关于有效标识符和更加复杂的使用方法请参考 the relevant section of PEP-440 。

☤ 指定Python的版本

想要使用一个已有的Python版本创建虚拟环境,使用 --python VERSON 选项,类似这样:

使用Python 3:

$ pipenv --python 3

使用Python 3.6:

$ pipenv --python 3.6

使用Python 2.7.14:

$ pipenv --python 2.7.14

如果提供了Python版本,就像这样,Pipenv会自动扫描系统上和提供的版本匹配的Python。

如果 Pipfile 还未创建会自动创建一个,看起来的效果是这样:

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.6"

注解

[requires] python_version = "3.6" 的加入说明你的应用需要这个版本的Python,以后在运行 pipenv install 时会自动使用这个 Pipfile (比如在另一台机器上)。如果不能满足,可以自己删除这一节。

如果你没有在命令行中指定Python的版本,那么会自动选择 [requires] 中的``python_full_version`` 或 python_version 。执行时候回退到当前系统的默认Python版本。

可修改依赖 (如 -e . )

你可以让Pipenv以可修改模式安装某个路径——通常用于开发Python包时,安装当前工作目录。

$ pipenv install --dev -e .

$ cat Pipfile
...

[dev-packages]

"e1839a8" = {path = ".", editable = true} ...

注解

所有次级依赖也会加到 Pipfile.lock 中。如果没有加 -e 选项次级依赖将  会加到 Pipfile.lock 中。

☤ 用Pipenv管理环境

用来管理你的pipenv环境的三个主要命令是 $ pipenv install , $ pipenv uninstall , 以及 $ pipenv lock 。

$ pipenv install

$ pipenv install 用于把包安装到pipenv虚拟环境及更新Pipfile。

与下面的形式的基本的安装命令一起:

$ pipenv install [package names]

用户可以提供这些额外的参数:

  • --two —— 在使用Python 2的虚拟环境中进行安装。
  • --three —— 在使用Python 3的虚拟环境中进行安装。
  • --python —— 在使用给定Python解释器的虚拟环境中进行安装。

警告

上述的选项均不能同时使用。同时它们也是 破坏性的,会删除你当前的虚拟环境,然后替换成一个适当版本的环境。

注解

Pipenv创建的虚拟环境可能与你预期的有所不同。危险字符(比如 $`!*@" 和空格、换行、制表符)会被替换成下划线。此外,当前目录的全路径会被编码成哈希值并追加到虚拟环境名称中来确保名称唯一。

  • --dev —— 同时安装 Pipfile 中 develop 与 default 里面的包。
  • --system ——使用系统的 pip 命令而不是虚拟环境中的。
  • --deploy — Make sure the packages are properly locked in Pipfile.lock, and abort if the lock file is out-of-date.
  • --ignore-pipfile ——忽略 Pipfile 直接从 Pipfile.lock 中安装。
  • --skip-lock ——忽略 Pipfile.lock,直接从 Pipfile 中安装。此外也不会更新 Pipfile.lock 以跟踪 Pipfile 的变化。

$ pipenv uninstall

$ pipenv uninstall 支持 pipenv install 中的全部参数,以及两个额外的选项, --all 和 --all-dev 。

  • --all ——此参数会删除虚拟环境所有的包,但不改变Pipfile。
  • --all-dev ——此参数会删除虚拟环境中所有的开发包,并从Pipfile中删除。

$ pipenv lock

$ pipenv lock 用来创建一个 Pipfile.lock ,其中指明了项目的 所有 依赖(及次级依赖),它们的最新可以版本,与当前下载文件的哈希值。这确保了构建是可重复的,最重要是 确定性 的。

☤ 关于终端配置

作为子终端使用时,终端通常是未配置的,因此 $ pipenv shell --fancy 可能会出现不可预料的结果。如果是这样,尝试使用 $ pipenv shell ,它会使用「兼容模式」尝试启动一个未配置的子终端。

一个正确的终端配置仅在登录会话是设置类似 PATH 的环境变量,而不是在每次子终端启动时(因为通常配置成这样做)。在fish中,这类似于下面这样:

if status --is-login
    set -gx PATH /usr/local/bin $PATH
end

你应该在你的终端里也这样做,放在你的 ~/.profile or ~/.bashrc 或者其他合适的地方。

注解

终端以交互模式启动。这表示如果你的终端从某个文件读取交互模式的配置(如bash默认为交互模式寻找 ~/.bashrc 配置文件),你需要修改(或创建)这个文件。

如果你在用 $ pipenv shell 时遇到问题,检查一下 PIPENV_SHELL 环境变量,它若存在则会被 $ pipenv shell 使用。具体可参考 ☤ Configuration With Environment Variables 。


欢迎欢迎~热烈欢迎~