当前位置: 首页 > news >正文

VisualStudio-Python-工具指南-全-

VisualStudio Python 工具指南(全)

原文:zh.annas-archive.org/md5/396df14cf233d147d6dfcb4a589a8b75

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

和许多其他开发者一样,Python 开发者总是需要找到方法来管理不同工具之间的开发工作流程。大多数时候,这都是在没有使用专为 Python 开发设计的完整 IDE 中的综合指南的情况下发生的。

提供完整指南的稀有、卓越的 IDE 通常价格昂贵,并且不提供实际步骤来帮助加快开发过程。

在过去几十年中,作为成熟且功能丰富的工具,Visual Studio 在编译语言和严格针对 Windows 和.NET 的语言市场中占据主导地位。它集成了许多实用工具和功能,以加快和简化开发者的工作流程,帮助用户处理重复性任务、管理项目,并深入了解项目结构。然而,最重要的是,它帮助用户清晰地了解代码的内部结构。

在过去几年中,微软开始探索如何将新语言集成到 Visual Studio 中;因此,Python Tools for Visual Studio (PTVS)被开发出来。这是一个经过良好开发的工具,已经发布了第二个版本,并且通常被专业开发者作为他们选择的新 IDE 用于 Python 项目。

PTVS 拥有 Python 开发者所能梦想的一切:一致的项目文件管理、与微软 IntelliSense 技术相结合的交互式调试和代码补全功能、项目模板、一流的 Django 集成包、IDE 中的虚拟环境管理、REPL 以及基于本地的快速加载和响应的 IDE。

本书将更多地关注 Python 在 Visual Studio 中的集成,而不是语言本身。它将尝试深入探讨工具提供的功能,并探讨其日常使用对开发者的可行性。我们将展示如何使用 PTVS 与 Django 结合的实例,以及如何在将知名库集成到 Microsoft Windows 上的 Python 项目中遇到困难时的处理方法。

本书涵盖内容

第一章,PTVS 简介,提供了 PTVS 和 Visual Studio 与 Python 解释器之间交互的高级概述。

第二章,Visual Studio 中的 Python 工具,对 PTVS 的工具、类型检查、内部功能以及自动化(IntelliSense 和 REPL)进行了深入分析。

第三章,日常编码工具,讨论了浏览代码和灵活设置 Python 环境。它还讨论了重构和调试过程。

第四章,PTVS 中的 Django,展示了如何利用强大的 Visual Studio IDE 和工具来加速 Django 开发。

第五章,PTVS 中的高级 Django,深入探讨了使用第三方 Python 库 Fabric 和 South 进行远程任务管理和模式迁移。

第六章,PTVS 中的 IPython 和 IronPython,概述了 IPython 库及其在 Visual Studio 中的集成。它还介绍了 IronPython 及其与.NET 框架的集成。

您需要为本书准备的内容

您需要具备 Python 的基本知识、安装了 Windows 的计算机以及互联网连接。为了完成练习和示例,我们建议您拥有 Visual Studio。

本书面向的对象

这本书旨在为那些希望通过 Visual Studio 为.NET 社区提供的自动化工具来提高 Python 项目生产力的开发者编写。对 Python 编程的基本知识是必不可少的。

规范

在本书中,您将找到多种文本样式,用于区分不同类型的信息。以下是一些这些样式的示例及其含义的解释。

文本中的代码单词如下所示:“我们可以通过使用include指令来包含其他上下文。”

代码块设置如下:

class foo:"""Documentation of the class.It can be multiline and contain any amount of text"""@classmethoddef bar(self, first=0, second=0):"""This is the documentation for the method"""return first + secondprint(foo.bar())

任何命令行输入或输出都应如下编写:

python manage.py schemamigration south2ptvs –-initial

新术语重要词汇以粗体显示。您在屏幕上看到的单词,例如在菜单或对话框中,在文本中如下显示:“点击下一步按钮将您带到下一屏幕。”

注意

警告或重要提示将以如下框中的形式出现。

小贴士

技巧和窍门如下所示。

读者反馈

我们欢迎读者的反馈。请告诉我们您对本书的看法——您喜欢什么或可能不喜欢什么。读者反馈对我们开发您真正从中受益的标题非常重要。

要向我们发送一般反馈,只需发送电子邮件至<feedback@packtpub.com>,并在邮件主题中提及书名。

如果您在某个主题上具有专业知识,并且您有兴趣撰写或为本书做出贡献,请参阅我们的作者指南www.packtpub.com/authors。

客户支持

现在,您已成为 Packt 图书的骄傲拥有者,我们有一些东西可以帮助您充分利用您的购买。

下载本书中的彩色图像

我们还为您提供了一个包含本书中使用的截图/图表彩色图像的 PDF 文件。彩色图像将帮助您更好地理解输出的变化。您可以从以下链接下载此文件:www.packtpub.com/sites/default/files/downloads/8687OS_ColoredImages.pdf

错误清单

尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果您在我们的某本书中发现错误——可能是文本或代码中的错误——如果您能向我们报告这一点,我们将不胜感激。通过这样做,您可以节省其他读者的挫败感,并帮助我们改进本书的后续版本。如果您发现任何勘误,请通过访问 www.packtpub.com/submit-errata,选择您的书籍,点击勘误提交表单链接,并输入您的勘误详情来报告。一旦您的勘误得到验证,您的提交将被接受,勘误将被上传到我们的网站,或添加到该标题的勘误部分下的现有勘误列表中。任何现有勘误都可以通过从 www.packtpub.com/support 选择您的标题来查看。

侵权

互联网上版权材料的侵权是一个跨所有媒体持续存在的问题。在 Packt,我们非常重视我们版权和许可证的保护。如果您在互联网上发现我们作品的任何非法副本,无论形式如何,请立即提供位置地址或网站名称,以便我们可以寻求补救措施。

请通过以下链接联系我们 <copyright@packtpub.com>,并提供涉嫌侵权材料的链接。

我们感谢您在保护我们作者以及为我们提供有价值内容的能力方面的帮助。

询问

如果您在本书的任何方面遇到问题,可以通过以下链接 <questions@packtpub.com> 联系我们,我们将尽力解决。

作者特别感谢

感谢 Packt Publishing 给我们机会为开发者社区出版这本书,以及他们在整个过程中提供的帮助:从注入想法到整个孕育过程。这是一段充满惊喜和发现的旅程。

我们还想要感谢我们的审稿人,Fabio Lonegro 和 Chris Marinic,他们在整个过程中提供了清晰且无偏见的反馈,为我们深入理解书籍的细节提供了宝贵的见解。

最后但同样重要的是,我们想感谢微软 PTVS 团队,特别是史蒂夫·道尔,他不仅亲自为本书做出了贡献,还通过提供技术支持在每一个细节上给予了帮助。感谢沙赫罗克·莫塔扎维通过推特联系我们(twitter.com/cathycracks/status/421336498748006400)。史蒂夫和团队的其他成员给了我们很多帮助、见解和建议,帮助我们克服书中一些复杂但非常重要的部分。他们甚至邀请我们亲自拜访,以更深入地了解他们的工作。我们真心觉得 PTVS 是由一群热爱社区并渴望将 PTVS 发展成为更好、更有用工具的人开发的。在我们看来,微软 PTVS 团队到目前为止已经用这个工具做了很多出色的工作,我们期待着未来还有更多精彩。

我们到目前为止已经享受了这次旅程,我们非常高兴能一起努力使这本书变得生动。这是一个充满爱与深夜深入讨论的亲密而艰难的过程。我们希望您能像我们从这本书中学到的一样,享受并从中获得知识。

我们希望您会发现这本书很有趣,并且它能帮助您发现 PTVS 的内在力量,正如斯科特·汉斯勒在他的博客文章中所描述的,微软的最好保密之一 - Python Tools for Visual Studio (PTVS),创建于 2013 年 7 月 2 日,可在www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx找到。

第一章。PTVS 简介

Python Tools in Visual Studio (PTVS) 是一款功能极其强大的工具,以下是一些原因:

  • 它为 Python 开发者提供了一个强大的 IDE,在一个独特的环境中集成了许多有用的编码功能和集成。

  • PTVS 为 Windows 平台上的开发者提供了使用他们最喜欢的 IDE——Visual Studio——来探索、学习和管理最常用的脚本语言之一的机会。

在本章中,我们将对 PTVS 进行高级概述,从安装和配置的逐步教程开始,然后快速概述控制 Python 环境和配置的 Visual Studio 的主要工具。理解 Visual Studio 窗口将大大提高你探索和管理源代码工作流以及你的 Python 项目的结构的能力。

逐步安装和配置

根据你预先安装的 Visual Studio 版本,PTVS 提供了各种安装格式。PTVS 可用于 Visual Studio 2010、2012 和 2013(专业版或以上)。

如果之前提到的 Visual Studio 版本没有安装在你的计算机上,你可以安装一个独立的 PTVS 版本。Visual Studio 允许并行安装,这意味着它提供了在一个系统上安装多个版本的能力。唯一的前提是,旧版本必须在安装新版本之前安装。

PTVS 的不同安装类型在其 CodePlex 网站上进行了描述,go.microsoft.com/fwlink/?LinkID=390659

逐步安装和配置

前面的图来自 go.microsoft.com/fwlink/?LinkID=390659

Visual Studio 2013 最重要的先决条件是操作系统运行 Windows 7(32 位或 64 位)或更高版本。

一旦你整理好了先决条件并安装了你选择的 PTVS 包,你将需要决定 Python 解释器的类型。选择合适的 Python 解释器取决于你的项目需求。请参考 PTVS CodePlex 页面 go.microsoft.com/fwlink/?LinkID=299429 以帮助你的决策过程。你可以选择 CPython 和 IronPython(32 位或 64 位)。如果你选择了 CPython,那么你可以选择 Python 2.7 或 3.3 版本。在大多数情况下,建议使用 CPython 3.3 32 位。对于 Web 开发,建议使用 CPython 2.7 32 位。

根据你的意图和将要与 Python 一起使用的框架进行选择。对于本书的范围,我们建议安装 32 位 CPython 版本 2.7。有关可下载的 Python 解释器的最新完整列表,请参阅 PTVS CodePlex 页面 go.microsoft.com/fwlink/?LinkID=390659

一旦安装了解释器,你可以通过从 开始 菜单打开 Visual Studio 2013 应用程序来启动 PTVS。如果一切正常,你将在屏幕上看到以下内容:

逐步安装和配置步骤

让我们检查整个系统是否正常工作。创建一个新的项目并查看它是否如下运行:

  1. 要创建一个新的项目,导航到 文件 下的 新建项目 菜单以启动 新建项目 对话框。逐步安装和配置步骤

  2. 选择 Python 应用程序 并点击 确定。这将创建一个新的项目和基本的 Hello World Python 应用程序文件。逐步安装和配置步骤

  3. 通过点击工具栏中的 开始 按钮,或直接按 F5 来启动应用程序。逐步安装和配置步骤

  4. 如果你系统上安装了任何先前的 Python,你应该会看到带有 Hello World 消息的应用程序响应窗口,如下面的截图所示:逐步安装和配置步骤

PTVS 工具概述

现在,你已经启动并运行了 PTVS,让我们更详细地看看 Visual Studio 提供的各种工具,这些工具能够增强 Python 开发周期。让我们从通过 视图 菜单可访问的窗口开始:

PTVS 工具概述

视图 菜单中,你可以选择两个对 Python 更重要的窗口:

  • Python 环境

  • Python 交互式

Python 环境窗口

Python 环境窗口显示了系统上安装的所有 Python 解释器版本(环境)。对于每一个,都可以访问一个名为 read–eval–print loopREPL)的交互式窗口,并且可以看到对所有已安装包进行的包分析状态。这被 Visual Studio 用于执行给定 Python 环境中所有类和方法的语法和类型分析。

由于 Python 代码的分析很复杂,所以在您第一次打开它时,您可能不会在完成数据库中看到进度。即使 Visual Studio 执行后台分析以不干扰 IDE 的用户体验,第一次分析可能需要从一分钟到一小时不等。这取决于不同的因素,如 Python 环境中安装的库的数量和可用的系统资源。一旦 Visual Studio 中所有 Python 包的分析完成,给定 Python 环境的行上会显示消息完成数据库是最新的

完成数据库在每次我们在 PTVS 中打开新项目或安装新的 Python 库时自动更新;在这种情况下,Visual Studio 会重新运行新可访问代码的后台分析。

有时,自动的背景分析过程可能会被禁用或阻止,安装的库列表不会自动显示。如果新安装的库和包没有显示,我们可以通过点击刷新数据库按钮手动触发分析过程。通过点击按钮,我们重新启用它,强制进行后台分析。

Python 环境窗口

带有已安装的 Python 环境列表和访问常用功能的工具按钮的 Python 环境工具窗口

Python 环境窗口中点击在文件资源管理器中查看链接将为您提供直接访问 Python 安装文件夹的权限。

Python 交互式

Python 交互式窗口直接在 IDE 中为您提供访问 Python 标准交互式工具的能力,以及访问您正在开发的模块的能力。这是一种快速且有效的方法来调试和测试一些代码片段。

Python 交互式

从您可以直接访问 Python 标准交互式工具的 Python 交互式工具窗口

除了标准 Python 交互式命令外,Microsoft 还添加了一些可以通过 *\(*(美元符号)访问的命令。可用命令的列表可以通过 `\)help` 获取。

带有 PTVS 的 Visual Studio 面板

Visual Studio 提供了许多标准工具窗口来控制应用程序的结构和工作流程。主要工具窗口包括解决方案资源管理器属性查找符号结果对象浏览器,如下面的截图所示:

带有 PTVS 的 Visual Studio 面板

在右侧,我们有解决方案资源管理器窗口。它提供了当前解决方案结构的概览。在 Visual Studio 中,解决方案是一组项目的集合。在解决方案资源管理器窗口中,您不仅可以管理项目的不同源文件,还可以配置其中使用的 Python 环境和包(即引用和依赖项)。

除了项目文件结构外,解决方案资源管理器窗口还提供了一个类视图,它显示了所有类和结构(即字段、属性和方法)的概览。这是对更复杂的窗口对象浏览器的快速查看,该窗口在截图中间可见。此窗口可通过视图下的对象浏览器菜单项访问(或使用Ctrl + Alt + J 快捷键)。这两个工具一起提供了一种浏览和导航代码对象结构的方法。

解决方案资源管理器窗口下,我们可以找到属性窗口,它显示了与项目中的各种对象相关的属性,例如其中的单个源代码文件。它还显示了更详细的信息,例如路径,以及它在文件构建系统中的管理方式。

在 PTVS 中,我们拥有的最重要的、功能最强大的窗口是源代码窗口,这是任何程序员大部分时间都在的地方。它提供了多标签源代码导航;每个面板都是一个单独的源代码文件:

带有 PTVS 的 Visual Studio 面板

在每个面板中都有两个组合框。左侧的一个提供了在文件中导航到类之间的功能;右侧的一个提供了在所选类的方法之间导航的功能。在源代码窗口中,Visual Studio 释放了更多强大的工具,如重构、IntelliSense 和代码遍历,我们将在下一章中深入探讨。

在接下来的章节中,我们将在探索 PTVS 的过程中发现其他一些会变得更为清晰的窗口,例如截图底部的查找符号结果窗口。该窗口显示了搜索命令的结果或给定代码元素(如方法、类或属性)的引用列表。

摘要

在本章中,我们介绍了 PTVS 的快速高级概述及其基础。现在,你已经启动了 PTVS 并熟悉了这两个窗口,你就可以在接下来的章节中带着更详细的项目知识深入 PTVS 了。

在下一章中,我们将更详细地介绍,并开始分析 Visual Studio 在 PTVS 中提供的编码工具,这些工具在编码过程中非常有帮助,并且可以管理 Python 项目。

第二章. Visual Studio 中的 Python 工具

现在我们已经启动了我们的工具,我们可以开始深入探讨 PTVS 最重要的功能之一:智能代码补全功能或 Visual Studio 的 IntelliSense。

在本章中,我们将深入了解 Visual Studio 的自动语法和层次分析工具,这些工具可以与 Python 一起使用。本质上,这些是 IntelliSense 和导航工具,对于 Python 开发者在编码过程中非常有帮助。

此外,我们将看到如何结合 Visual Studio 的内部 REPL 工具来最大化其功能,以便进行快速且有用的代码测试和调试。

使用 Python 精通 IntelliSense

Python 环境选项卡所示,Visual Studio 分析当前解决方案中可用的 Python 代码和已安装的库,以填充内部数据库。通过这样做,我们能够更好地理解可用的类、方法和字段描述。这是以帮助开发者加快编码过程的方式进行的。

IntelliSense 上下文感知代码补全功能可以通过Ctrl + 空格键或Ctrl + J快捷键在行中调用。Ctrl + J快捷键即使在只有一个可能性的情况下也会显示列表。这是当你在一个命令的中间调用它时发生的情况:

使用 Python 精通 IntelliSense

IntelliSense 会显示当前代码中所有可用的方法、类和字段,并按字母顺序排列。除了从可用命令列表中显示它们之外,它还为你提供快速文档。在我们的例子中,对于range方法,IntelliSense 会显示其重载方法的列表及其签名。

如果你已经知道你正在寻找的方法,但需要一点帮助来查看可用的参数列表,只需在打开它时通过参数括号回忆 IntelliSense 窗口,或者使用Ctrl + Shift + 空格键快捷键。

使用 Python 精通 IntelliSense

在这种情况下,IntelliSense 将显示参数的可能组合以及每个参数的快速文档,这些文档由参数在列表中的位置给出,如前一张截图所示。

模块的自动导入是另一个有趣的功能,有助于加快开发速度。它还提供了当你从一个 Python 文件中使用类时自动包含的功能。

如前一张截图所示,如果你在你的项目中的一个 Python 文件中有一个Paging类,IntelliSense 可以将其识别为从你的项目可访问的类;它还会通过在类名第一个字符下显示智能标签来建议进一步的操作:

使用 Python 精通 IntelliSense

IntelliSense 在导入类名时处于活动状态。类名下方的蓝色小矩形表示 Visual Studio 中有可用的函数

当点击时,会显示一个动作弹出窗口。你可以选择要执行的操作,以及将其源文件/原始文件引用到当前代码中的能力:

使用 Python 掌握 IntelliSense

如果你点击其中的一个选项,将添加包含语句作为代码文件的标题:

使用 Python 掌握 IntelliSense

选择“从 Paging 导入 Paging”选项后,包含语句将生成在代码文件顶部

一旦类在你的代码中可见,Visual Studio 就能够检查引用的类。当你调用它时,你将在 IntelliSense 窗口中看到该类,如下面的截图所示:

使用 Python 掌握 IntelliSense

IntelliSense 显示了 Paging 类中的可用方法

IntelliSense 可以进一步扩展。在下面的示例中,当使用 bar 方法定义 foo 类时,IntelliSense 将检索类结构以显示在代码中使用的辅助工具:

使用 Python 掌握 IntelliSense

IntelliSense 能够让我们洞察类的结构和其可用元素,但没有任何文档。为了在代码中显示文档,我们只需将其添加到类的代码中,如下所示:

使用 Python 掌握 IntelliSense

IntelliSense 显示类或方法文档

它非常直接且简单。在编码会话中,Python 项目的任何元素都会自动分析并输入到 Visual Studio 的参考数据库中,无需重新工作代码或执行外部工具。

当代码被引用时,IntelliSense 也可以提供帮助,为我们提供所有可用模块的概述,所有 PythonPath 引用的模块,你将在解决方案中引用的模块,以及项目中的模块:

使用 Python 掌握 IntelliSense

此外,IntelliSense 不仅有助于选择模块,还可以选择导入部分:

使用 Python 掌握 IntelliSense

在 Visual Studio 中使用 REPL

在本节中,我们将探讨在 Visual Studio 中使用标准的 读取-评估-打印循环REPL)工具的 Python 应用。如介绍中所述,PTVS 有一个增强版的 REPL。除了 PTVS REPL 版本中的标准 Python 命令——交互式 Python 窗口之外,还有一些额外的命令和功能可以帮助加快调试过程,并允许对代码进行简单的测试。

通过在 REPL 中输入 $help,可以显示增强的命令,如下面的截图所示:

在 Visual Studio 中使用 REPL

我们将详细介绍最常用和有趣的操作命令。$cls命令清理命令行,而$reset命令以清理引擎的方式,您可以以干净的 REPL 环境重新启动。

最有趣的功能是$load$mod$load命令允许您在 REPL 中执行给定 Python 文件的内容:

在 Visual Studio 中使用 REPL

REPL 工具中$load 函数的示例

这些功能很有用,因为它们提供了代码执行周期的即时视图。

$mod命令为您提供了更改 REPL 工具操作作用域的机会。

当 REPL 启动时,它自动设置为打开项目的主体模块(__main__)。输入$mod后跟模块名称,允许您切换到同一项目的另一个模块,从而访问模块及其内容。

在 Visual Studio 中使用 REPL

如前一个截图所示,REPL 窗口的用户界面顶部有一个组合框,允许我们交互式地切换作用域。IntelliSense 也在 REPL 中管理。

我们可以使用编码面板上下文菜单中的发送到交互命令(或使用Ctrl + E快捷键)执行项目中每一块代码:

在 Visual Studio 中使用 REPL

我们还可以通过从DEBUG菜单中选择执行 Python 交互式项目选项(或使用Shift + Alt + F5快捷键)来指示调试器使用 REPL 作为应用程序的输出。

您还可以指示调试器将 REPL 作为应用程序的输出而不是标准控制台输出;为此,只需在DEBUG菜单中点击执行 Python 交互式项目条目或使用Shift + Alt + F5快捷键:

在 Visual Studio 中使用 REPL

这在开发 Web 应用程序的后台模块时尤其有用,因为如果您希望在浏览器中直接进行调试和测试,代码的调试和测试特别困难。使用 REPL 工具,您可以实现更高效和更快捷的过程。

轻松导航代码

Visual Studio 提供了许多功能来加速代码导航的过程;同时,这些功能使得 Visual Studio 能够以更全面的视角进行流畅的编码过程。这在您需要切换到模块以查看其实际实现或更新其某些部分时尤其有用,即使它位于项目的其他位置。代码导航的一些最重要的功能可以从编码面板的上下文菜单中访问:

轻松导航代码

如前一个屏幕截图所示,当光标位于一个方法上并且打开上下文菜单时,可以找到转到定义命令。转到定义命令将视图移动到引用模块中方法的实现代码。

另一个有用的调试功能是查找所有引用命令(Shift + F12快捷键)。它显示了项目中使用该方法的全部点:

轻松导航代码

执行查找所有引用命令的结果将在新的工具窗口查找符号结果中显示。它显示了方法的定义以及方法实际在项目中使用的实际引用。

此外,代码面板提供了一些工具,可以快速导航到代码的任何给定点。由于 Visual Studio 在代码编辑器面板中打开 Python 文件时动态分析代码,因此 IDE 会自动创建其层次索引。要导航索引,请使用位于窗口顶部的导航栏上的两个组合框。

第一个显示文件中所有可访问的全局元素,而第二个显示在第一个组合框中选择的项目的所有内部元素。在组合框中选择一个元素控制代码编辑器的视图并跳转到引用的代码。

在下面的屏幕截图中,我们可以看到组合框的导航方式,通过显示第二个组合框中html2text类的所有内部组件来展示层次视图:

轻松导航代码

在导航代码时,特别是跳转到模块之间时,可以通过工具栏中的两个有用的按钮轻松地前后移动。查找位于工具栏最左侧的两个箭头形状的按钮。指向左边的箭头用于后退,可以通过Ctrl + -快捷键访问;指向右边的箭头用于前进,可以通过Shift + Ctrl + -快捷键访问。

轻松导航代码

工具栏左侧的蓝色导航按钮是快速导航代码的好方法

编辑器窗口提供了一种通过位于窗口顶部文件标签来导航已打开文件的方法。截至本书编写时,Visual Studio 已经对该功能进行了优化。因此,即使是 PTVS,也有许多可能性来实现这一点。您可以关闭标签并将它们移动到其他位置。单个标签可以显示在一个独立的窗口中,或者与另一个窗口并排显示。

轻松导航代码

Visual Studio 提供了强大的窗口管理功能,通过简单地将它们从标签拖动到每个窗口,在 IDE 中为每个窗口提供了一套完整的对齐选项。

标签可以固定在标签栏的最左侧位置,这样在代码编辑器中打开多个文件时可以轻松访问。标签本身有一个上下文菜单,包含更多针对文件的命令:

轻松导航代码

从标签页上下文菜单中,你可以管理标签页或直接在标签页中执行代码。在编码过程中,复制完整路径打开包含文件夹选项非常实用。

你也可以通过解决方案资源管理器窗口在项目文件之间导航。点击感兴趣的文件将在代码编辑器窗口中打开该文件。单击打开文件处于临时状态,这意味着文件将在标签栏最右端的新标签页中打开。这在浏览多个文件而不进行操作时非常有用。

与永久标签页不同,临时标签页将保持打开状态,直到你通过解决方案资源管理器窗口导航到另一个文件。这减少了代码编辑器中打开的标签页数量。众所周知,管理大量打开的标签页将变得困难。

解决方案资源管理器窗口中双击文件将在代码编辑器中打开一个永久标签页,这由图钉图标表示:

轻松导航代码

右侧的“解决方案资源管理器”窗口是一个强大的工具,可以导航项目文件。通过点击文件在临时标签页中打开文件。双击打开一个带有图钉图标的永久标签页。

对象浏览器

另一种以高层次的清晰视角查看项目和组成它的元素的方法是使用对象浏览器工具。这个工具为你提供了整个项目的更层次化的视图。有两种不同的方式来访问这个视图;让我们来看看这两种方法。

第一种方法是打开对象浏览器工具的完整版本,它可以通过主工具栏上的视图菜单访问,或者使用Alt + Ctrl + J快捷键。

使用快捷键将在代码编辑器窗口中打开一个新标签页,它将显示以下视图:

对象浏览器

对象浏览器工具是一个三栏窗口。左上栏显示组成项目的所有 Python 文件列表。右上栏显示组成所选文件的元素列表(方法、字段等)。下栏显示所选元素的足迹和相关文档(如果有的话)。

对象浏览器工具中的任何元素都是可点击的。双击将打开代码文件并跳转到实现所选元素的代码。

您还可以通过窗口顶部的工具栏中的对象浏览器设置图标来过滤显示的元素类型。您还可以使用顶部的搜索栏进行实际搜索,这将显示在底层面板中搜索文本的所有引用:

对象浏览器

除了使用完整的对象浏览器工具外,我们还可以通过类视图窗口遍历项目层次结构,该窗口通常位于与解决方案资源管理器相同的窗口中。切换到类视图选项卡将显示简化的对象浏览器工具,实际上它与完整工具相同,但没有文档面板。类视图选项卡显示如下:

对象浏览器

此工具提供了与完整功能的对象浏览器工具完全相同的功能,包括搜索和过滤功能。双击元素将跳转到实现的确切代码点。

摘要

在本章中,我们介绍了 IntelliSense 在 Python 中的广泛用途,包括使用简单导入和引用功能在项目文件之间处理类。我们还学习了如何使用 REPL 以更流畅的调试和测试过程。

现在,您已经熟悉了不同的代码导航功能,这些功能可以帮助您使用过滤和选项卡查找代码引用。结合对象浏览器工具,您能够以所有方法、类、字段、元素、相关文档等的高级视图查看您的 Python 项目。

在下一章中,我们将深入探讨日常编码工具,以引导您通过整个编程生命周期。

第三章。日常编码工具

在本章中,我们将介绍对于 Visual Studio 中 Python 程序员日常工作中必不可少的编码工具。

首先,我们将分析如何在 Visual Studio 中处理项目和解决方案,然后我们将介绍功能重构。最后,我们将介绍可用的调试器功能。

项目处理

Visual Studio 最重要的有用功能之一是解决方案和项目处理。由于整个工作流程都集成到 IDE 中,开发者无需处理文件、工作路径和库。所有这些都可以通过强大的 Visual Studio 用户界面直接在 IDE 中管理。

在我们详细探讨工具之前,我们首先将查看与项目处理相关的 Visual Studio 术语。本章中使用的两个主要概念是解决方案和项目。

解决方案

解决方案本质上是一个包含项目的容器,这些项目被捆绑在一起以覆盖一个独特的范围。项目可以相互引用,并且它们可以是不同类型的。例如,在一个解决方案中,你可以混合一个 Python 项目和一个 C++项目,同时将 Python 解决方案中项目的输出用作外部库。解决方案还提供了一种将整个工作代码库分组到单个文件/文件夹结构中的方法。然后你可以将分组插入并管理到你选择的版本控制工具中,以便快速共享。Visual Studio 解决方案还能够维护内部项目的共享配置,同时在不同的事件(即解决方案构建期间)处理不同的命令和操作。

项目

项目是经典的一组文件的定义,这些文件是用相同的语言编写的,并且覆盖单个范围。项目的类型可以从网站到库或控制台应用程序不等。

Visual Studio 中的 Python 项目包含环境定义:代码的目标位置、外部库的引用以及编译器必须在库中搜索的搜索路径。最后一个尤其重要,因为 PTVS 不使用计算机的 PythonPath 环境变量。

忽略系统设置的有意且实用的功能允许你在不同的项目中为不同的 Python 版本引用不同的库。此外,代码中的依赖列表还带来了调试过程更容易和在新计算机上设置新开发环境更简单的额外好处。

PTVS 提供了预配置的 Python 项目,称为项目模板,正如我们在第一章中看到的,它负责创建正确的项目结构,以便开发者可以专注于代码。

让我们来看看实际处理解决方案和项目的工具。其中最重要且功能最强大的是解决方案资源管理器窗口工具。此工具提供了对解决方案组成以及每个项目中可用的文件和配置的完整视图。

项目

要添加内容或对解决方案或项目执行操作,请选择树视图中的解决方案或项目节点

到现在为止,你应该已经知道如何使用这个工具在代码中导航,正如我们在第二章“Visual Studio 中的 Python 工具”中学到的那样。解决方案资源管理器窗口工具还提供了文件处理功能,使我们能够直接在项目结构中添加或删除文件。只需在项目结构中选择一个文件夹项即可插入新文件。要向项目根目录添加内容,请选择解决方案资源管理器中的项目项,右键单击以打开上下文菜单,然后进入添加子菜单,如图下截图所示:

项目

在这里,你可以选择添加新项现有项新文件夹。如果你选择添加新项,将显示添加新项窗口,如下所示:

项目

从这里,你可以从项目中的各种类型创建新项。

如果你想要将现有文件添加到所选文件夹中,请从上下文添加菜单中选择添加现有项选项。这将打开一个标准的 Windows 浏览文件窗口;从这里,你可以通过文件系统导航并选择要添加到所选文件夹中的文件。该文件的副本将被添加到文件夹中。

要删除文件,只需在项目列表中选择项,然后从上下文菜单中选择删除菜单项。

项目

解决方案资源管理器窗口中的文件上下文菜单提供了许多关于文件的功能,如“删除”、“重命名”等

现在我们对解决方案资源管理器更有信心了,让我们深入探讨解决方案资源管理器提供的 Python 特定选项。在以下章节中,你将了解有关 Python 项目配置的更多信息:环境、引用和搜索路径。

指定 Python 环境

有可能为项目特别定义一个 Python 环境版本,而不是使用机器上安装的默认 Python 版本。这对于我们与其他开发者一起工作的项目尤为重要。默认情况下,Visual Studio 在启动新项目时使用机器上安装的默认 Python 版本。要将项目链接到特定的 Python 版本(环境),请右键单击解决方案资源管理器中的Python 环境项以查看上下文菜单。如图下截图所示:

指定 Python 环境

解决方案资源管理器窗口中的 Python 环境上下文菜单

这个上下文菜单提供了添加或删除 Python 环境以及将项目链接到虚拟 Python 环境或现有环境的功能。最后两个选项在需要在一个完全隔离的环境空间中运行项目时非常有用。项目可以在一个隔离的地方运行,其中包含所有依赖项和库,而不会干扰机器上现有的 Python 安装和 Python 路径配置。

在 Visual Studio 中创建虚拟环境非常简单。点击添加虚拟环境添加现有虚拟环境,然后按照几个步骤完成设置。

例如,我们将为我们的项目创建一个虚拟环境。点击添加虚拟环境将显示以下模态窗口:

指定 Python 环境

你可以在这个窗口中定义虚拟环境名称和目标 Python 版本。一旦按下创建按钮,Visual Studio 将创建虚拟环境。作为一项实用的额外功能,如果机器上没有安装必要的 Python 库——本质上包括pipsetuptoolsvirtualEnv——PTVS 将通过下载和安装它们来处理这个问题。像其他通用 Python 包一样,它们将被安装在系统定义的site-packages文件夹中。

要将项目链接到特定的 Python 版本,只需在上下文菜单中点击添加 Python 环境选项,然后会出现以下辅助框:

指定 Python 环境

这个辅助框显示了机器上安装的 Python 版本列表以及你可以选择的版本。一旦选择了 Python 版本,引用将显示在解决方案资源管理器中。

指定 Python 环境

项目中的引用项元素提供了紧密链接项目中的库或引用到.pyd文件中编译的包的能力

右键点击引用选项,然后点击添加引用以弹出以下辅助窗口:

指定 Python 环境

我们将关注项目选项卡,它显示了你的解决方案中的所有其他项目。如果你希望使用另一个库项目来处理应用程序的子范围,请选择所需的项目并点击确定。这将创建项目中的一个引用。你可以在解决方案资源管理器窗口下的引用选项中找到引用列表:

指定 Python 环境

定义搜索路径

搜索路径功能基本上告诉 Visual Studio 在哪里搜索项目中将使用的附加库。你可以引用系统中的一个文件夹或包含库的.zip文件:

定义搜索路径

搜索路径上下文菜单,包含“添加文件夹”和“添加 ZIP 存档”选项

一旦选择了.zip文件的文件夹,您可以在窗口中找到库:

定义搜索路径

重构

重构是现代 IDE 中最大的进步之一。它通过处理代码更改和自动操作的方式显著减少了时间并降低了错误率。Visual Studio 附带了一些出色的开箱即用的重构功能,如重命名和从所选代码片段创建方法。

重命名功能可以真正帮助解决代码中的潜在错误,例如更改元素名称时。在代码库中可能存在仍然使用旧名称的实例。让我们看看以下代码:

class foo:"""Documentation of the class.It can be multiline and contain any amount of text"""@classmethoddef bar(self, first=0, second=0):"""This is the documentation for the method"""return first + secondprint(foo.bar())

在此代码中,有一个名为foo的类,其中有一个名为bar的方法。如果重命名bar,它将通过引用一个不存在的方法来创建错误。

Visual Studio 的重构功能通过考虑元素的 所有引用来帮助重命名过程。选择您希望重命名的元素,然后通过右键单击它访问代码上下文菜单中的重构功能:

重构

通过右键单击元素访问重构功能

选择重命名功能以启动两步过程:

重构

您将被提示输入元素的新的名称。还有一个复选框允许您预览要重命名的元素的引用。当复选框未选中时,所有找到的引用都将被重命名;您将无法预览哪些引用将被重命名。

重构

在您希望预览引用更改的情况下,将显示一个预览窗口。如图所示,在此窗口中,旧元素名称的所有引用都可以在顶部面板找到,代码预览将在底部。将分析项目中的所有文件以正确重构元素。每个引用旁边都有一个复选框,提供激活该引用重构的选项。单击应用按钮将重命名元素和所有选定的引用。

另一个重构功能是提取 方法。当您希望将一段代码作为函数或方法在其他地方重用时,它非常有用。Visual Studio 可以将其生成为一个函数/方法。例如,参考以下截图:

重构

在代码中,高亮的代码旨在创建一个通用方法,用于计算两个元素的和。选择代码,然后从上下文菜单中的重构子菜单中选择提取方法。这将弹出提取方法对话框,如下截图所示:

重构

提取方法窗口中,你可以在新方法名称字段中定义方法的名称,并在提取到字段中提供创建方法的路由。一个预览面板也显示了生成的代码。点击确定根据所选代码创建新方法。

调试

Visual Studio 提供了一套庞大的调试工具;PTVS 继承了其中许多工具,这有助于 Python 开发者通过逐步执行、运行时变量监视功能、断点和在调试会话中查看代码失败位置的能力来调试代码。

能够看到代码中断的位置可以显著加快调试会话的速度。在下面的屏幕截图中,我们可以看到一个未跟踪异常的示例:

调试

调试 Python 应用程序时的错误对话框示例

当你运行代码时,Visual Studio 会停止执行,因为它检测到有问题的代码引发的异常。它突出显示了错误发生的确切位置,同时建议修复方法——即使现在 Visual Studio 可能不会为问题提供有用的解决方案。

调试过程不仅关乎理解异常在哪里被引发,还关乎理解代码在不符合预期行为时发生了什么。这就是逐步执行和断点派上用场的地方。

使用断点

断点是你可以在代码中定义的一个点,用于停止执行。Visual Studio 使设置断点变得非常简单。它允许更好地查看变量的内容,并遵循代码的流程。可以通过在代码窗口的空白处单击来设置断点,这将弹出一个红色圆圈。在代码的上下文菜单中的断点子菜单中选择插入断点

一旦设置了断点,你可以在代码窗口中看到它,如下面的屏幕截图所示:

使用断点

现在断点已设置,如果你运行应用程序,Visual Studio 将精确地在断点处停止执行,同时遵循代码的流程:

使用断点

指定第 29 行为断点

IDE 将光标放在我们设置断点的代码行的第一列。当在该上下文中悬停在变量周围时,我们可以看到变量的当前值。

利用监视条目

我们还可以在变量上创建监视条目,以便在程序流程中查看变量的值如何变化。要监视一个变量,在调试过程中右键单击它,并在上下文菜单中点击添加监视。变量将被添加到如下所示的监视窗口中:

利用监视条目

除了监视变量外,还可以从局部变量选项卡中查看当前作用域中的所有变量:

利用监视条目

一旦遇到断点,可以使用以下三个函数之一来继续程序流程:Step IntoStep OverStep Out。这些函数可以通过调试菜单或工具栏中的按钮访问。或者,你也可以使用Run to CursorCtrl + F10)来运行程序直到达到光标所在位置:

利用监视条目

  • Step Into: 这将执行下一个语句并停止。如果下一个语句是调用一个函数,调试器将在被调用函数的第一行停止,进入函数。

  • Step Over: 这将执行下一个语句。然而,如果下一个语句是调用一个函数,调用它将不会进入该函数。当你不愿意跟随函数的整个程序流程时,这很有用。

  • Step Out: 这将执行代码直到当前函数的末尾。当你不想遍历当前函数的整个程序流程时,这很有用。

如果你只想继续程序流程的执行而不进入代码的每一行,只需在工具栏中按继续按钮或F5。如果你的代码中还有其他断点,执行将继续通过所有断点直到最后一个。

摘要

在本章中,我们介绍了日常编码的工具。你现在熟悉了使用解决方案资源管理器浏览代码以及灵活设置 Python 环境。你还了解了更高效的重构和调试过程,以及设置断点和监视条目如何帮助你精确追踪代码的断点位置。

在下一章中,我们将探讨如何利用强大的 Visual Studio IDE 和可用的工具来加速 Django 开发。

第四章:PTVS 中的 Django

Django 是一个基于模型-视图-控制器MVC)模式的 Python 高级 Web 框架;它提供了一系列工具和助手,以创建一个快速开发环境。基于 Django 的网站有很多成功的例子,如 Instagram、Pinterest、Disqus 以及 Dropbox 的部分功能。它自 2006 年开始开发,使其成为 Web 项目的稳固选择,尤其是在选择 Python 作为语言时。有关 Django 的更多信息,请参阅其官方项目网站www.djangoproject.com/

在本章中,我们将深入了解 Visual Studio 中 Django 框架的集成。我们将看到如何利用 Visual Studio 工具启动 Django 项目,并为其设置开发环境。

一旦我们有一个基本的工作网站,我们将学习如何创建数据库连接并设置管理界面,在 Visual Studio 中创建一个新的 Django 应用程序。

Django 项目模板和工具

让我们来看看 PTVS 中可用的 Django 相关工具和模板,从 Django 项目模板开始。在 Visual Studio 中,项目模板是样板助手,根据项目的特定类型创建项目轮廓。要开始一个新的 Django 项目,在文件菜单下打开新建项目窗口。一旦打开,从左侧的列表中选择Python。这显示了系统中可用的已安装项目类型。以下是窗口的外观:

Django 项目模板和工具

在右侧面板中单击Django 项目选项,在窗口底部定义项目名称。我们在指定文件应保存的位置时执行此操作。您还可以为项目的 Visual Studio 解决方案定义解决方案名称。一旦定义了这些属性,单击确定即可创建 Django 项目。

Django 项目模板和工具

在解决方案资源管理器中显示的示例默认 Django 项目结构

安装 Python 包

基本的 Django 项目文件结构在解决方案资源管理器窗口中显示。在项目结构就绪后,下一步是安装所需的 Python 包。我们必须向解决方案指示 Django 框架的位置或需要安装它的位置。首先,将 Python 解释器添加到项目中——我们将使用 Python 2.7——然后通过在解决方案资源管理器窗口的Python 环境节点中右键单击已安装的Python条目来安装 Django 包,最后选择安装 Python 包条目:

安装 Python 包

将打开安装 Python 包窗口;在此处,输入启动环境中引用框架所需的pip Python 包的名称,该名称为django。您甚至可以通过在django==x.x.x格式中命名包的版本来选择框架的特定版本。x.x.x表示完整的版本标签。如果没有提供版本号,将安装包的最新版本。

安装 Python 包

点击确定以通过从pip仓库下载开始安装 Django 包。请确保在系统协议中检查您的系统设置,以授予 Visual Studio 系统管理员的权限。

注意

以管理员身份运行复选框仅在之前的安装失败时才应选中。它确保pip在系统上安装包具有必要的权限。

安装 Python 包

安装过程可以在输出窗口中查看,如前一个截图所示。如果您使用的是以管理员身份运行,则无法显示实时下载进度。在这种情况下,输出窗口将显示一段时间安装'django',因为这表明pip仍在下载。

安装 Python 包

下载过程完成后,将显示更详细的信息,如前一个截图所示。它会通知您安装过程以及是否成功。如果一切顺利,pip日志的输出窗口将显示'django'安装成功的消息。

运行应用程序

现在 Django 框架已成功安装在系统中,并在项目中引用,让我们确保它正常工作,所有工作流程都运行正确。通过按F5键或通过在工具栏中单击运行图标来运行应用程序。由于 Visual Studio 知道当前项目是一个网站,它将在浏览器实例中运行输出。您可以看到紧随其后的运行按钮和将启动的默认系统浏览器的名称。您可以通过单击显示所有可能选择的下拉按钮来选择我们将要运行项目的浏览器:

运行应用程序

运行应用程序时会发生以下两件事:

  • PTVS 运行 Django manage.py命令

  • 显示了一个带有网站输出的浏览器实例

第一个显示在命令提示符窗口中,告知我们执行的结果。它指示设置中是否存在任何问题。它是从命令行启动python manage.py runserver命令的等效操作。

运行应用程序

同时,还会创建一个新的浏览器实例,显示我们网站的首页。在一个新的经典 Django 安装中,你会看到以下 It worked! 页面:

运行应用程序

如果你能看到前面的屏幕,这意味着 Django 项目的设置已成功完成。现在我们可以继续开发网站。

Django 模板中的 IntelliSense

我们已经讨论了 Visual Studio 中 IntelliSense 在 Python 代码中的强大功能。IntelliSense 还支持 Django 模板编辑器,为其提供访问 Django 所有模板标签的权限;它还提供访问由调用视图定义的上下文的权限。

IntelliSense 在 HTML 部分提供以下帮助:

Django 模板中的 IntelliSense

此外,当处于 Django 块标签 ("{% … %}") 中时,它会显示 Django 特定的标签和视图上下文对象。IntelliSense 还在过滤器方面提供帮助:

Django 模板中的 IntelliSense

为 Django 项目设置和管理数据库

一旦设置好一个可工作的 Django 项目,我们还需要附加一个数据库,以便有一个存储网站数据和 Django 管理控制台整体配置的地方。为了本书的目的,我们将使用易于管理的 SQLite 数据库来连接到项目。它是一个基于文件的数据库,可以很容易地由 Django 管理。有关 SQLite 的更多信息,请参阅其网站 www.sqlite.org/

将数据库附加到 Django 非常简单。你只需告诉 Django 使用哪个数据库以及如何连接到它。这必须在 Django 的 settings.py 文件中完成。要连接并创建 SQLite 数据库,代码中的数据库部分应如下所示:

为 Django 项目设置和管理数据库

由于 SQLite 是基于文件的数据库,Name 属性应该是数据库文件的路径。我们使用一个包含项目根路径的常量 Project_Root,它必须首先通过以下两行代码定义:

为 Django 项目设置和管理数据库

数据库现在已连接到 Django 项目。要创建数据库中的配置表,请使用 Django sync DB 命令。Visual Studio 提供了一个命令,可以从 IDE 内启动此过程。要访问 sync 命令,右键单击 解决方案资源管理器 窗口的项目节点,并选择 Django Sync DB 项以启动过程:

为 Django 项目设置和管理数据库

一旦点击 Django Sync DB,同步过程就开始。Django 管理控制台选项显示如下详细日志:

为 Django 项目设置和管理数据库

当命令首次执行时,Django 会创建实际的数据库以及用于 Django 管理控制台的认证条目。系统会要求输入首选用户名和密码。一旦提供了信息,过程就会结束,数据库已创建。

我们还可以在解决方案资源管理器窗口中看到此过程的输出,因为我们已指示 Django 使用 SQLite 并指明了创建数据库文件的路径。要查看此信息,请通过单击解决方案资源管理器工具栏中的查看所有文件命令,在解决方案文件夹中启用查看所有文件选项。

为 Django 项目设置和管理数据库

在工具栏中找到“查看所有文件”选项

一旦视图被激活,可以在解决方案文件夹中找到db.sqlite3文件。可以通过右键单击它并选择包含在项目中命令将其包含在解决方案文件中。然后 SQLite 文件被包含在由 Visual Studio 管理的文件列表中。

为 Django 项目设置和管理数据库

设置管理界面

现在项目已经连接了数据库,我们可以在其中激活 Django 的管理界面。此时过程非常简单;你只需要在项目设置文件和主要 URL 管理器中取消注释几行代码即可。

首先,在设置文件的Installed_Apps部分激活 Django 应用程序django.contrib.admin

设置管理界面

第二步,转到urls.py文件,取消注释导入admin类并使管理员能够发现项目中的模型的段落。此外,还必须取消注释 URL 模式中管理的/admin/路径的最后一条线:

设置管理界面

现在 Django 管理应用程序已在项目中激活。如果操作成功,你将看到管理登录页面。启动应用程序后,导航到/admin/页面:

设置管理界面

将在数据库设置期间创建的凭据插入以访问管理部分:

设置管理界面

现在我们已经设置并启用了一个完整的 Django 环境。让我们继续在 Visual Studio 中创建一个新的 Django 应用程序。

创建新的 Django 应用程序

Django 应用程序是项目的一个子模块,它是自包含的,并且与其他应用程序不相互交织。在理论上,你可以复制它并将其放入另一个项目中,而不需要做太多,或者根本不需要做任何修改。

通常,要启动 Django 应用程序,你必须在命令行中运行manage.py startapp命令,这将在你项目中创建一个新的文件夹,在那里你可以找到一个视图、一个模型、一个管理界面和一个测试 Python 文件。

Visual Studio 提供了一个在 IDE 中创建新 Django 应用程序的简单方法,自动化整个流程;此外,命令也在创建模板文件夹的过程中。要创建一个新的 Django 应用程序,只需在解决方案资源管理器窗口中的项目节点上右键单击,然后在添加菜单中选择Django 应用程序命令:

创建一个新的 Django 应用程序

这将打开添加 Django 应用程序窗口,您可以在其中指定要创建的 Django 应用程序的名称:

创建一个新的 Django 应用程序

通过点击确定,Django 应用程序将在项目中创建,并且可以在解决方案资源管理器窗口中找到添加的文件列表:

创建一个新的 Django 应用程序

现在,您可以像通常为 Django 所做的那样创建应用程序的代码。请注意,即使 Visual Studio 自动化了 Django 应用程序的创建,它也不一定会在设置文件中创建条目。这需要像往常一样手动完成,将引用添加到Installed_Apps部分;为此,只需打开主settings.py文件,并在Installed_Apps部分中添加新创建的应用程序:

创建一个新的 Django 应用程序

在微软 Azure 上部署 Django 项目

云平台是复杂的系统,它们提供根据应用程序接收到的流量在多个服务器实例上扩展 Web 应用程序的方法。它们还以开发者无需处理系统硬件和软件架构的方式抽象化服务器环境,开发者只需处理资源和服务。这有其优势,因为这样一来,开发者实际上不需要配置和管理服务器;然而,同时这也证明是一个缺点,因为并非所有软件组件都能在这样的系统中运行。

Azure 是微软的一个云托管平台,它使开发者能够快速构建、部署和管理跨越全球微软管理的数据中心网络的应用程序。它与 Visual Studio 紧密集成;此外,Python 语言也由这项服务支持。

我们将看到如何使用 Visual Studio 提供的工具在 Azure 上部署 Django 项目。

要使用微软 Windows Azure,首先我们需要通过www.windowsazure.com/创建一个 Azure 账户。

账户创建后,您可以访问门户部分,它将带您进入 Azure 服务门户,您可以在左侧菜单中找到所有可用的服务。现在我们将创建一个网站:

在微软 Azure 上部署 Django 项目

要创建一个新的网站,请点击创建网站链接;这将打开页面底部的标签页:

在微软 Azure 上部署 Django 项目

只需在URL文本框中插入你想要创建的网站的名称;如果该名称可用,点击创建网站按钮来创建网站。这将启动网站生成过程,在过程结束时,你将看到创建的网站:

在 Microsoft Azure 上部署 Django 项目

除了网站服务外,我们还需要创建一个存储条目,以便将网站文件上传到那里。要创建存储条目,请点击左侧菜单中的存储项,然后点击新建

在 Microsoft Azure 上部署 Django 项目

这将在页面底部打开存储创建区域:

在 Microsoft Azure 上部署 Django 项目

对于网站服务,我们只需要在URL文本框中输入存储服务的名称;一旦你有了这个,点击创建存储帐户按钮来创建存储服务实例。

现在我们已经拥有了部署我们的 Django 项目到 Azure 所需的所有元素。然而,在继续之前,我们需要确保我们的项目已经准备好。Azure 需要所有位于项目文件夹中的与项目相关的文件,因为它需要确保所有 Python 库都存在。为了确保满足这些要求,Django 项目需要在虚拟环境中创建。这将保留所有要包含在项目文件夹中的文件;否则,库将仅位于系统的 site-packages 文件夹中。

虚拟环境是 Python 环境的独立工作副本,它允许你在不影响其他项目的情况下专注于特定项目。同时,它将所有依赖项保存在相同的文件夹结构中。在 PTVS 中创建虚拟环境很容易;你可以通过从Python 环境上下文菜单中选择添加虚拟环境命令来完成此操作,如下面的截图所示:

在 Microsoft Azure 上部署 Django 项目

这将打开添加虚拟环境窗口:

在 Microsoft Azure 上部署 Django 项目

一旦你输入虚拟环境名称并点击创建按钮,虚拟环境将在项目中创建。现在,你将在项目中包含的所有包都将被复制进去,因此所有依赖项都将可在项目文件夹内使用,而不依赖于系统的 site-packages 文件夹:

在 Microsoft Azure 上部署 Django 项目

一旦我们确保了我们的项目包含在虚拟环境中,我们就可以继续并配置 Visual Studio,使其准备好部署我们的 Django 项目到 Azure。

部署过程从在解决方案资源管理器树视图中 Django 网站节点的上下文菜单中调用发布命令开始:

在 Microsoft Azure 上部署 Django 项目

这将打开 发布网站 向导窗口,该窗口将指导您完成 Django 项目的部署过程:

在 Microsoft Azure 上部署 Django 项目

要将 Visual Studio 连接到我们之前创建的 Azure 网站,请点击 导入 按钮;一旦您确信可以使用 Azure 账户登录,请选择您希望 Django 应用程序部署到的网站名称:

在 Microsoft Azure 上部署 Django 项目

在此阶段,按照其他向导步骤操作,并点击 发布。这样,Visual Studio 将开始将所有文件部署到 Azure 平台的过程;您可以从 输出 窗口中跟踪部署过程:

在 Microsoft Azure 上部署 Django 项目

一旦部署过程完成,Visual Studio 将在 Azure 上部署网站的默认浏览器中打开:

在 Microsoft Azure 上部署 Django 项目

关于 Windows Azure 上的 Python 的更多文档,请参阅 Windows Azure 网站 www.windowsazure.com/en-us/develop/python/

摘要

在本章中,我们学习了如何在 Visual Studio 中创建 Django 项目并设置环境。我们还了解了如何在 Microsoft Azure 上部署 Django 项目。

在下一章中,我们将学习如何在 Visual Studio 中管理 Python 库。此外,我们还将学习如何使用一些最强大的 Python 库来管理 Django 框架的部署、环境间数据库的同步,以及一个帮助我们成功且动态地在网站上使用和管理图像的库。

第五章:PTVS 中的高级 Django

一旦我们查看在 Visual Studio 中使用 PTVS 设置的 Django 开发环境,我们就可以开始分析一些强大的 Django 库以及如何在 Visual Studio 中使用它们。多年来,许多开发者为 Django 创建了强大的库和工具,以加快开发周期的各个方面。我们将在这里更详细地研究其中的一些,看看它们如何在 Visual Studio 和 PTVS 中集成。

在本章中,我们将分析两个对 Django 开发者有用的库,从两个不同的角度:使用 Fabric 库自动化任务,以及使用 South 管理 Django 的模型迁移。

库管理

我们已经学习了如何在 PTVS 中使用它提供的 GUI 工具安装新的软件包。现在,我们将了解如何选择一个软件包索引而不是另一个;换句话说,何时选择easy_install而不是pip

通常来说,使用pip比使用easy_install要好得多,这有主要的原因。正如pip的创造者 Ian Bicking 在他自己的pip介绍中写的,优势如下:

  • 在安装之前,所有软件包都会被下载。因此,不会发生部分完成的安装。

  • 在控制台上呈现有用的输出时需要小心。

  • 正在跟踪操作的原因。例如,如果正在安装软件包,pip会跟踪为什么需要该软件包。

  • 错误信息应该是有用的。

  • 代码相对简洁且结构紧凑,使得程序化使用更加容易。

  • 软件包不必作为 egg 存档安装;它们可以平装安装(同时保留 egg 元数据)。

  • 其他版本控制系统(GitMercurialBazaar)都提供了原生支持。

  • 软件包的卸载很容易。

  • 定义简单,有固定的需求集合,并且可靠地重现一组软件包。

可能看起来没有理由选择easy_install而不是pip。然而,这正是需要仔细考虑的地方。

有一个注意事项使得 Windows 环境的选择变得非常困难:一些库或依赖项是用 Python C 编写的,这是 Python 调用用 C/C++编写的库的一种方式。要在您的 Windows 机器上编译这些库,您必须安装与编译原始解释器相同的原始编译器的确切版本。例如,如果您使用 Python 2.7,则需要 Visual Studio 2008 的 C++编译器;如果您使用 Python 3,则需要 Visual Studio 2010。

这是因为有一个长期的传统,即 Python 扩展模块必须使用与 Python 本身相同的编译器版本(更具体地说,是 CRT 版本)来构建,这在mail.python.org/pipermail/python-list/2010-April/573606.html中提到。

使用easy_install包安装程序,预编译的包将被下载并安装到系统的site-packages文件夹中。

注意

一个经验法则:如果您试图在 Windows 机器上安装的库包含 Python C 扩展,那么选择easy_install会更好。对于所有其他情况,pip要好得多。

如果您不知道您正在导入的库的类型,您应该选择pip。如果在安装过程中遇到编译问题,您可以卸载库并使用easy_install重新安装。

通常,大多数具有底层功能(例如,加密、图形和数学函数)以及与其他软件(例如,驱动程序)交互的库(例如,加密、图形和数学函数)都使用 Python C 扩展。

Fabric 库 – 部署和开发任务管理器

Fabric 是一个 Python 库和命令行工具,允许在应用程序部署和管理任务中执行。本质上,Fabric 是一个允许开发者通过命令行执行任意 Python 函数的工具,同时也提供了一套函数,以便通过 SSH 在远程服务器上执行 shell 命令。将这两者结合起来,为开发者提供了一种无需记住在命令行上需要执行的命令序列的强大方式来管理应用程序工作流程。

库文档可以在fabric.readthedocs.org/找到。

在 PTVS 中安装库很简单。像所有其他库一样,要将此库插入 Django 项目,在解决方案资源管理器窗口的Python 环境中的Python 2.7节点上右键单击。然后,选择安装 Python 包条目。

Fabric 库 – 部署和开发任务管理器

Python 环境上下文菜单

点击它将弹出安装 Python 包的模态窗口,如下截图所示:

Fabric 库 – 部署和开发任务管理器

使用easy_install从 Python 包索引下载非常重要。这将把库的预编译版本带入系统,而不是需要在系统上编译的纯 Python C 库。

一旦包在系统中安装,您就可以开始创建可以在命令行外执行的任务。首先,为 Fabric 创建一个配置文件,fabfile.py。此文件包含 Fabric 将执行的任务。

Fabric 库 – 部署和开发任务管理器

上一张截图显示了一个非常简单的任务:一旦执行,它将打印出字符串hello world。您可以通过使用 Fabric 命令fab从命令提示符执行它,如下截图所示:

Fabric 库 – 部署和开发任务管理器

现在你已经知道系统运行良好,你可以继续到更有趣的部分,在那里你可以创建一些通过 ssh 与远程服务器交互的任务。创建一个连接到远程机器并找出其上运行的操作系统类型的任务。

The Fabric library – the deployment and development task manager

env 对象提供了一种以编程方式向 Fabric 添加凭据的方法

我们定义了一个 Python 函数 host_type,它在远程上运行 POSIX 命令 uname –s。我们还设置了一些变量来告诉 Fabric 我们连接到哪台远程机器,即 env.hosts,以及访问该机器所需的密码,即 env.password

注意

将明文密码放入源代码中,就像前一个屏幕截图示例中所示,从来都不是一个好主意。

现在,我们可以在命令行中执行 host_type 任务,如下所示:

The Fabric library – the deployment and development task manager

Fabric 库使用提供的信息连接到远程机器,并在服务器上执行命令。然后,它在响应的输出部分返回命令的结果。

我们还可以创建接受命令行参数的任务。创建一个在远程机器上回显消息的任务,从以下屏幕截图中的参数开始:

The Fabric library – the deployment and development task manager

以下是如何执行任务的两个示例:

The Fabric library – the deployment and development task manager

我们还可以创建一个辅助函数,在远程机器上执行任意命令,如下所示:

def execute(cmd):run(cmd)

我们还可以通过使用 put 命令将文件上传到远程服务器:

The Fabric library – the deployment and development task manager

put 命令的第一个参数是你想要上传的本地文件,第二个参数是目标文件夹的文件名。让我们看看会发生什么:

The Fabric library – the deployment and development task manager

使用 Fabric 的部署过程

使用 Fabric 的可能性真的是无限的,因为任务可以用纯 Python 语言编写。这提供了自动化许多操作的机会,并使我们能够更多地关注开发,而不是关注如何将代码部署到服务器上以维护它们。

South – 数据库部署库

由 Python 社区开发,South 是一个 Django 库,它将模式迁移引入 Django 应用程序。South 库的主要目标是提供一个简单、稳定且数据库无关的迁移层,以防止所有模式更改的麻烦。

South 的关键特性如下:

  • 自动迁移创建:South 可以通过分析你的 model.py 文件来检测应用程序模型中的更改,并自动创建迁移代码——基本上是针对你使用的数据库的 SQL 命令,以匹配模型中的更改。

  • 数据库独立性:South 对数据库不可知,支持不同的数据库后端。目前,South 支持 PostgreSQL、MySQL、SQLite、Microsoft SQL Server、Oracle 和 Firebird(beta 支持)。

  • 应用智能:South 了解并使用 Django 应用程序的概念,允许开发者仅对某些应用程序而不是整个项目使用迁移。

  • 版本控制友好:South 会注意到其他人向同一应用程序提交迁移,并可以检查是否存在冲突。

为什么要在 Django 中使用 South

Django 最有趣的部分之一是其 对象关系映射ORM),它创建了一个一致的数据库结构抽象。这是一个非常强大的工具,允许程序员专注于 Python 代码。Django 只为新模型(例如,在创建它们时)妥善处理数据库结构管理。它没有现成的解决方案来管理可以应用于现有数据库模式的模型更新。

在应用程序生命周期中更改模型通常是一个痛苦的操作。技术上,当更改模型的模式或进行模式迁移时,无论你是修改字段还是添加另一个字段,都需要重新创建数据库结构。这意味着该模型的所有数据都会丢失,或者需要手动迁移来将数据从旧版本的表移动到数据库中的新版本。如果你需要将数据库从开发服务器环境对齐到生产服务器环境,这尤其耗时。

安装 South

让我们看看如何将 South 引入 PTVS。和其他 Python 库一样,我们可以通过在选择的(Python 2.7)环境上右键点击并通过选择安装 Python 包来从解决方案资源管理器窗口中安装它,从而弹出以下安装对话框:

安装 South

如 South 文档所述,你必须使用 easy_install Python 包索引;务必选择它。

一旦安装了包,确保在设置文件中激活它很重要。为此,在 Installed_Apps 代码的末尾添加 south

安装 South

确保在 Settings.py 的 "Installed_Apps" 部分中 "south" 库是最后一个。

由于当 Django 执行库时,所有 Django 项目的模型都已经创建并且可以被 South 发现,因此 South 需要成为列表中的最后一个包。

为了测试一切是否正常工作,导航到 Django 壳并尝试导入库。普通的 Python 开发者会去命令行并运行manage.py shell,但在 PTVS 中有一个面板可以这样做。要打开它,在解决方案资源管理器窗口中快速右键单击Django项目条目,然后在Django中选择打开 Django Shell选项:

安装 South

这将打开一个新的Django 管理控制台面板,它基本上是一个 REPL,但集成了 Django。从这里,你可以通过尝试导入库来检查 South 库是否工作正常:

安装 South

IntelliSense 在 Django 壳中是激活的,所以如果你看到south出现,那么一切正常。

为了完成初始化过程,运行sync_db以创建迁移跟踪表。这也可以像之前看到的那样从 Django 上下文菜单中完成:只需在Django菜单中选择Django Sync DB命令。

安装 South

如前一张截图所示,这将在 South 中启动您应用程序当前模型同步的过程。

使用 South 的架构迁移

现在我们已经将south安装并在我解决方案中工作,让我们尝试创建一些东西来测试迁移。在项目中使用Django 应用命令在添加菜单中创建一个新的应用,并将其命名为south2ptvs,如下截图所示:

使用 South 的架构迁移

不要忘记在settings.py文件中注册新的应用,并确保south仍然是Installed_Apps部分的最后一个条目:

使用 South 的架构迁移

然后,打开新创建的应用中我们将定义测试模型的models.py文件:

使用 South 的架构迁移

我们不使用标准的 Django sync_db命令来创建数据库中模型的架构,而是为Knight模型设置一个迁移。这个操作将是模型整个迁移历史的入口点。

导航到命令行,通过执行以下命令来执行初始化迁移:

python manage.py schemamigration south2ptvs –-initial

这将在south2pvts应用上执行 South 的schemamigration命令以进行初始化过程。以下是将要发生的事情:

使用 South 的架构迁移

我们已经成功创建了迁移文件,但还没有将其应用到db上。由于South一次只处理一个应用,存储迁移信息的迁移文件被创建在south2ptvs文件夹中。

使用 South 的架构迁移

Django 应用中迁移文件夹的内容

迁移文件是纯 Python 编写的普通文件。它们可以编辑,但你应该谨慎操作,并且只有在必要时才这样做。

剩下的唯一事情是将迁移应用到数据库,通过在应用程序上调用 South 库的migrate命令,使用以下命令:

python manage.py migrate south2ptvs

使用 South 进行模式迁移

执行 South 的迁移命令

这将最终化迁移;现在我们的模型已准备好进行修改。未来的模型更新可以通过 South 使用迁移轻松地应用到数据库。

按以下方式添加新字段以更新模型:

使用 South 进行模式迁移

因此,现在我们必须创建一个新的迁移文件并将其应用到数据库。要创建迁移文件,再次使用schemamigration命令,如下所示。但是,不要使用–-initial参数,因为模型中已经定义了迁移。

python manage.py schemamigration south2ptvs –-auto

使用 South 进行模式迁移

要获取创建迁移文件的状态并将迁移应用到db,只需运行以下migrate命令:

python manage.py migrate south2ptvs

使用 South 进行模式迁移

如果我们在管理界面中注册模型,我们可以进入我们网站的行政部分,查看新字段是否出现在模型中:

使用 South 进行模式迁移

由于迁移存储在文件中,您只需将迁移文件复制到服务器,然后在远程系统上应用迁移即可(可能使用 Fabric)。

要了解更多细节和见解,请访问 South 的官方文档网站south.readthedocs.org/

摘要

在本章中,我们更深入地探讨了如何在 PTVS 中处理第三方 Python 库,pipeasy_install包索引之间的主要区别,以及它们如何处理使用 Python C 扩展编写的预编译库。

我们还探讨了两个流行的 Django 开源库,Fabric 和 South,它们为您的 Django 项目添加了远程任务管理和模式迁移功能。

在下一章中,我们将介绍 IPython 及其在 Visual Studio 中的图形功能,以便涵盖 IronPython 及其与.NET 框架集成的主题。

第六章:PTVS 中的 IPython 和 IronPython

在本章中,我们将看到 PTVS 如何与两个特别有用的 Python 扩展程序交互:IPython 和 IronPython。

尽管它们的名称不同,但它们彼此之间非常不同。IPython 更倾向于以扩展 REPL 接口的方式,帮助您以更互动的方式处理代码,提供诸如即时图形绘图等特性。IronPython 提供了对 Python 代码的 .NET 类访问,并将 Python 集成到 .NET 应用程序中。

PTVS 中的 IPython

IPython 是一个用于 Python(也适用于其他语言集成)的交互式计算命令行,它提供了增强的类型内省——在运行时检查对象类型或属性的可能性——丰富的媒体和 REPL 扩展。

作为一种用于数据分析和数学图形绘制的交互式外壳工具,IPython 源自学术科学计算背景,但通过图形集成功能吸引了数据科学家。

IPython 的一个有趣特性是它能够以交互式方式绘制表达式的数学图形,这与 MATLAB 类似。

PTVS 支持 IPython 库,并提供了将 REPL 内部生成的图形集成的功能。

我们需要从已经为 Windows 操作系统编译好所有代码的发行版中安装 IPython 及其支持依赖,如 matplotlib。此软件包的发行版可以从 www.lfd.uci.edu/~gohlke/pythonlibs/#scipy-stack 下载。这个网页来自加州大学欧文分校,包含大量 Python 软件包的 Windows 二进制文件的非官方仓库。有不同版本的软件包可供选择,这取决于您使用的 Python 解释器和操作系统版本。对于我们的提案,我们将安装 Windows 32 位系统的 Python 2.7。

注意

作为一种替代方案,您可以使用包含一系列用于科学和工程软件的 Python 库的 Python (x, y) 发行版。安装程序可以从 code.google.com/p/pythonxy/ 下载。

运行安装程序后,您可以选择它提供的库;对于我们的范围,请确保包括 SciPy 库和 IPython。

一旦您从您选择的源获得了库,我们就可以通过从命令提示符执行以下命令来测试整个安装:

ipython --pylab

此命令执行带有 pylab 扩展的 IPython 环境。它还允许您使用 matplotlib 库来绘制图形;这是一个可以与 Python 一起使用数学函数绘制图形的 Python 绘图库。例如,让我们尝试绘制 10,000 个随机数字的直方图,这些数字被分成 100 个样本:

x = randn(10000)
hist(x, 100)

将前面的代码输入到 IPython 壳中,将显示以下结果:

IPython in PTVS

有关 matplotlib 库能做什么的更多详细信息,请参阅库网站 matplotlib.org/

现在 IPython 已经启动并运行,让我们指导 PTVS 以允许 REPL 与 IPython 通信,从而扩展其绘图功能。首先,我们需要找到 Python 解释器的 REPL 选项。您可以通过单击正在使用的 Python 环境中的 交互选项 标签,从 Python 环境 窗口中快速定位此选项。

IPython in PTVS

这将弹出 选项 对话框,如下所示:

IPython in PTVS

交互模式 下拉菜单中,PTVS REPL 工具的不同模式如下列出:

  • 标准模式:此模式提供了默认的 REPL 交互式窗口,在其中我们可以执行 Python 代码

  • IPython:此模式允许我们在 REPL 与 PyLab 库直接交互时直接在 REPL 中查看图表

  • 无 PyLab 的 IPython:此模式允许我们在独立窗口中看到渲染的图表

对于我们的例子,我们选择了 IPython 模式。现在我们已经设置了 交互式窗口,让我们看看 Visual Studio 的表现。你可以在代码编辑器中编写我们之前示例的代码,然后通过上下文菜单中的 发送到交互式窗口 选项在 REPL 中执行它,而不是在 交互式窗口 内部编写代码。正如我们在 第二章 中所看到的,“Visual Studio 中的 Python 工具”,预期的结果是以下内容:

IPython in PTVS

我们也可以通过一种方式执行文件中的代码,这样我们只能在外部窗口中看到生成的图表。然而,在我们能够这样做之前,我们需要添加一些其他代码,如下所示:

IPython in PTVS

上一张截图中的第一行将引用 pylab 库,最后一行将渲染图表。要在外部窗口中运行代码,请右键单击 解决方案资源管理器 窗口中的文件节点,并选择以下截图所示的 不调试启动 命令:

IPython in PTVS

这将在控制台中执行代码,并在执行结束时出现生成的渲染窗口:

IPython in PTVS

Matplotlib 库还提供了通过添加 savefig 命令仅用一行代码将生成的图表保存到文件的选项,如下所示:

IPython in PTVS

在这个例子中,生成的图表将被保存为项目文件夹根目录下的 plot.png 文件。

要深入了解功能以及深入挖掘 IPython 集成提供的绘图功能,请参阅 IPython 网站 ipython.org/。您还可以参考 matplotlib 网站 matplotlib.org/,其中包含与此主题相关的示例和出色的文档。

IronPython 的唯一限制是它不能与我们现在将要探索的其他库 IronPython 一起使用。尽管您可以在 交互选项 表单中选择它,但 IronPython 目前不支持 IPython。

IronPython

IronPython 是 Python 语言的开放源代码实现,与 Microsoft .NET 框架紧密集成。这意味着您可以通过 IronPython 在您的 Python 应用程序中使用 .NET 库,或者在使用 .NET 语言时使用 Python 脚本。

在 Python 代码中使用 IronPython 的 .NET 类

要在 PTVS 中设置 IronPython,首先我们需要从官方网站下载 IronPython 安装程序,ironpython.net/

下载适用于您操作系统的包版本后,通过双击它来安装包。安装完成后,您将在 Python 环境窗口中看到一个新的解释器,如下所示:

在 IronPython 代码中使用 .NET 类

在前面截图所示的示例中,实际上有两个解释器。这是因为安装了 IronPython 的 64 位版本,这导致在机器上安装了 32 位和 64 位版本。

让我们尝试创建一个新的 IronPython 项目,以了解如何从 Python 交互 .NET 库。导航到 文件 | 新建 | 项目 来创建一个新的项目:

在 IronPython 代码中使用 .NET 类

这将打开 新建项目 对话框。选择 IronPython 应用程序 模板,并为它指定一个项目名称:

在 IronPython 代码中使用 .NET 类

这将创建一个普通的 Python 项目,但项目环境将是 IronPython 而不是 Python。

在 IronPython 代码中使用 .NET 类

您可以在解决方案资源管理器中找到表示环境的 IronPython。

现在,您可以从 Python 应用程序内部访问 .NET 库。默认情况下,系统 .NET 命名空间被引用,因此我们可以开始使用其中的元素来了解如何与 Python 中的基类交互。

例如,让我们看看如何创建一个 全局唯一标识符GUID),使用 date 函数进行操作,然后将它们打印到控制台;我们使用 Python 通过访问 .NET 类来完成所有这些操作。

在 IronPython 代码中使用 .NET 类

在 Python 中使用.NET 类的示例

如所示,我们导入了ConsoleGuidDateTime .NET 对象,并在代码中使用它们创建一个新的 GUID 对象(第3行),获取当前的 UTC 日期和时间(第4行),并在此基础上添加 100 天(第5行)。之后,我们使用.NET 控制台对象打印出结果(第711行),并等待用户按下Enter键关闭应用程序。显然,我们可以使用正常的 Python print命令而不是Console对象来打印结果。然而,由于 IronPython 中 Python 和.NET 代码之间没有区别,我们为了看到不同对象集成的实际效果,使用了Console对象。

代码的执行将为我们提供以下结果:

使用 IronPython 在 Python 代码中使用.NET 类

我们还可以利用 Core System 组件之外的其他.NET 命名空间。例如,如果我们想使用System.Xml组件,这是一个安装在系统全局程序集缓存GAC)中的.NET 核心库,我们只需要在代码中使用clr模块的加载功能将其加载进来,如下所示:

import clr
clr.AddReference('System.Xml')

现在,它可以在代码中引用,并且 IntelliSense 功能变得可用:

使用 IronPython 在 Python 代码中使用.NET 类

.NET 类型以 Python 类的形式暴露,你可以在.NET 类型上执行许多与 Python 类相同的操作。在两种情况下,你都是通过调用类型来创建实例。即使是复杂类型,例如XmlDocument,你也不需要像在.NET 中那样实例化它;这将在 IronPython 运行时幕后完成。

使用 IronPython 在 Python 代码中使用.NET 类

在 Python 中使用 XmlDocument 类的示例

在.NET 中使用 IronPython 的 Python 代码

到目前为止,我们已经学习了如何从 Python 代码中与.NET 类交互;现在让我们看看如何在.NET 代码中使用 Python。

首先,让我们创建一个新的 C#控制台应用程序。为了能够在.NET 代码中运行 Python 代码,你需要引用两个必要的组件,以添加我们的.NET 应用程序的集成功能:IronPythonMicrosoft.Scripting。要在.NET 应用程序中添加对组件的引用,右键单击解决方案资源管理器窗口中的引用节点,并选择添加引用菜单项:

使用 IronPython 在.NET 中使用 Python 代码

这将打开引用管理器对话框窗口。我们需要的两個组件位于扩展列表中,可以通过点击左侧的树视图来激活:

使用 IronPython 在.NET 中使用 Python 代码

一旦从列表中选择两个程序集,通过在它们旁边的复选框中放置勾选标记,然后点击确定。这些程序集的引用已添加到项目中。

你将在解决方案资源管理器窗口的引用列表中看到它们,如下面的截图所示:

使用 IronPython 在.NET 中使用 Python 代码

现在让我们在我们的项目中创建一个新的类,该类包含 Python 集成的代码:

使用 IronPython 在.NET 中使用 Python 代码

此代码将为 Python 创建脚本引擎(第8行),定义包含要执行 Python 代码的字符串(第12-18行),然后执行 Python 脚本。请特别注意包含 Python 代码的字符串。它必须正确缩进;否则,解释器将返回缩进错误。

要在控制台运行代码并查看结果,请将以下代码添加到Program.cs文件中:

使用 IronPython 在.NET 中使用 Python 代码

这将执行我们之前定义的函数,并期望用户按下Enter。运行应用程序以查看以下结果:

使用 IronPython 在.NET 中使用 Python 代码

你还可以调用在.NET 应用程序中定义的变量和函数,并在 Python 代码中使用它们。为此,我们需要定义一个作用域,并将其作为参数传递给Execute方法,以便解释器可以将这些元素传递给 Python 代码。

通过添加包含Add函数的作用域来扩展我们之前的Execute方法:

使用 IronPython 在.NET 中使用 Python 代码

我们使用 lambda 函数创建了一个作用域和Add函数(第1314行);然后,我们添加了一个新的 Python 命令(第23行),调用此函数。最后,我们执行了 Python 代码,并将作用域变量传递给脚本(第27行)。执行程序将显示以下结果:

使用 IronPython 在.NET 中使用 Python 代码

在我们的最后一个例子中,我们将看到如何执行来自外部文件的代码。假设我们有一个包含以下代码的 Python 文件,这实际上是我们在上一个例子中作为字符串拥有的代码:

使用 IronPython 在.NET 中使用 Python 代码

这就是我们如何在.NET 应用程序内部执行文件的方式:

使用 IronPython 在.NET 中使用 Python 代码

在这个例子中,我们定义了脚本引擎和作用域。我们不是在.NET 代码内部定义和执行 Python 代码,而是从外部文件加载它,将作用域传递给解释器,并执行它(第40行)。

将 Python 代码集成到.NET 应用程序中提供的可能性真的是无限的。与解释器共享作用域变量打开了一种可能性,即可以在.NET 应用程序内部使用现有的 Python 库,或者在我们的应用程序内部使用 Python 作为脚本语言。

摘要

在本章中,我们探讨了两种在 Visual Studio 中扩展 PTVS 和 Python 的方法,以及两个强大的工具:IPython 和 IronPython。IPython 与纯 Python 语言更为相关,而 IronPython 则与 Microsoft .NET 框架更为集成。

这两个工具展示了使用和交互 Python 的新方法,为探索这个强大语言提供了新的边界;所有这些都是在 Visual Studio 和 PTVS 内部实现的。

通过本章,我们探索 Visual Studio 中 Python 工具的旅程就此结束。我们试图向 Python 开发者展示 Visual Studio 的强大功能和 Microsoft IDE 提供的自动化和帮助;我们还探讨了使用 Python 作为创建新强大应用程序的语言的可能性。

除了工具本身,我们还探讨了在 Microsoft Windows 操作系统上使用 Python 库可能遇到的问题和解决方案。我们还研究了在 Visual Studio 中探索 Django 的主题,以及它提供的用于加速和管理应用程序生命周期的强大库。

我们只是触及了表面,但我们希望这本书已经为您提供了对 PTVS 的深入洞察,并激发了您进一步探索和学习的兴趣。

开心编码!

http://www.hskmm.com/?act=detail&tid=13301

相关文章:

  • Gevent和Subprocess问题
  • Ansible自动化运维实战 - 详解
  • 建筑行业能源管理破局:MyEMS 打造商业楼宇 “能耗可视化 + 智能调控” 方案
  • 【数据结构】双向链表 - 指南
  • 告别“能源糊涂账”:MyEMS如何帮企业把能耗数据“算明白、用到位”
  • Windows 离线环境下使用 VS Code 连接容器 Python 环境完整指南(亲测可用)
  • Macos 安装kali报错
  • 完整教程:线程、进程、协程
  • CF913G Power Substring
  • YC大佬分享的 10 个 vibe coding技巧,看完收获巨大
  • ES集群部署-EFK架构实战 - 实践
  • 《BOE解忧实验室》第四季圆满收官 以科技重塑文化生活新范式
  • 洛谷P2261 [CQOI2007] 余数求和
  • arc206 总结
  • 科研必读|提升酿酒酵母表达蛋白产量的关键技术
  • 完整教程:uniapp、devceo华为鸿蒙运行模拟器报错:未开启Hyper-V
  • 浏览器访问页面卡顿刷新页面方法
  • 完整教程:散斑深度相机原理
  • 如何用 Dify 无代码工作流实现 AI 自动化抓取与分析 LinkedIn 招聘数据
  • WSL+共享文件夹搭建zephyr工作环境
  • 如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模型来提高性能吗
  • 数据结构-单链表基础2
  • G1垃圾回收过程
  • Trellix自动化大规模修复开源漏洞,已修补超6万个项目
  • 爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?
  • Vben Admin5.0 keepAlive缓存和onActivated未生效
  • 版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年9月发布)
  • JVM体系结构
  • PE程序常见脱壳方案
  • 基于二值化断裂裂缝的裂缝拼接算法