- 博客(3547)
- 收藏
- 关注
原创 Python 高手编程系列三千四百八十七:扩展硬件
用 pip 下载这个简单的脚本,只要 Graphviz(参见 http://www.graphviz.org/)安装在你的。的输出,而且可以从多个其他分析文件中(如 Linux perf,xperf,gprof,Java HPROF 等)• cProfile:这是一个 C 实现,提供与 profile 工具相同的接口,但具有较少的开销。要以某种方式扩展分析器,那么 profile 可能会是一个更好的选择,因为它不使用 C 扩展。此外,高效的硬件是非常昂贵的(收益递减规律),因此这种方法也存在经济上的限。
2025-09-21 10:14:41
613
原创 Python 高手编程系列三千四百八十六:首先要能工作
只要你坚持使用 Python 化的语法,这些语法在第 2 章和第 3 章中提到过,你的代码应该是。即使 Python 试图使常见的代码模式是最快的,优化工作可能也会混淆你的代码,使代。当你达到了 90%的优化目标,剩下的 10%将使你的代码完全不可读,那么你最好停止。此外,如果有一个很好的库可以满足你的需求,你就没必要重新。设计文档应提供所有交互和每个连接的性质的设计图,从中可以获得系统的整体架构,这是没有意义的,因为真正的。应用程序通常由非常复杂的交互组成,并且,在真正使用它之前,我们不可能全面的。
2025-09-21 10:14:07
268
原创 Python 高手编程系列三千四百八十五:文档驱动开发
说,这个 doctest 也是一个很好的文档,所以,应该发自内心地改变对 doctest 的用法。稍后,doctest 将演变以考虑新的元素或所需的变化。所以,doctests 和常规测试之间的平衡是一个饱受争议的问题,这取决于由团队,可读的和可用的,所以,它们可以是包文档的一部分,而那些不可读的,只是用于构建并。由于我们已经知道如何构建、打包和测试软件,在接下来的两章中,我们将关注如何。本章是关于优化的,并且提供一套一般原则和分析技术。“我们应该忘记小的效能,大约 97%的情况:过早优化是万恶之源。
2025-09-21 10:13:36
816
原创 Python 高手编程系列三千四百八十四:测试环境与依赖兼容性
环境隔离的重要性在本书中已经提到很多次了。通过在应用程序级(虚拟环境)和系统级(系统虚拟化)上隔离执行环境,你可以确保测试可以在可重复的条件下运行。这样,你可以避免受因破坏依赖关系导致的罕见且模糊的问题。正确隔离测试环境的最佳方法是使用支持系统虚拟化的持续集成系统。对于开源项目有很好的免费解决方案,如 Travis CI(Linux 和 OS X)或 AppVeyor(Windows),但是如果你需要这样的东西来测试私有的软件,很可能你需要花一些时间,在一些现有的开源 CI。
2025-09-21 10:13:01
897
原创 Python 高手编程系列三千四百八十三:测试覆盖率
py.test 中的典型解决方案要容易得多。在我们的例子中,我们使用了 py.test 框架中的 monkey-patching 实用程序,但。在上面的代码中,我们使用了一个新的 pytest.yield_fixture()装饰器。Python 中有很多模拟库,但最常见的是 unittest.mock,标准库中也提供了该库。例中,我们手动执行了一切,并提供了一个自定义的 patch_smtplib()固件函数,具有。创建之初,它是一个第三方包,并不是 Python 分发版的一部分,但很快就作为临时包加入。
2025-09-21 10:12:25
873
原创 Python 高手编程系列三千四百八十二:我做测试
OK常规的 TestCase 类和 doctests 也会被执行。最后,nose 提供了类似于 TestCase 方法的断言函数(assertion functions)。这些函数遵循 PEP 8 命名约定,而不是使用 Java 单元测试中的约定(参考 http://nose.readthedocs.org/)。编写测试固件nose 支持 3 个级别的测试固件。● 包级别:可以把 setup 和 teardown 函数添加到__init__.py 模块中,这是一。
2025-09-21 10:11:54
532
原创 Python 高手编程系列三千四百八十:什么样的测试
它们测试代码的绝大部分,并专注于许多应用程序层或者组件相互交互的情况。集成测试的形式和范围因项目的。好的并且流行的方法是至少测试基本指标(静态代码分析和代码风格违例),不允许将任何拉低指标的代码合并到主干。单元测试(unit tests)是完全适合测试驱动开发的底层测试。流行的测试 Web 应用程序的方式,其中负载被理解为来自真实用户或程序化客户端的 Web。这些测试不是通过 TDD 完成的,而是由项目经理、QA 工作人员甚至客户构建的。件真的做了它应该做的,使用与用户相同的媒体并控制输出。
2025-09-21 10:10:53
417
原创 Python 高手编程系列三千四百七十九:文档构建与持续集成
会让你的开发更加轻松。它是一个免费的服务,用于托管使用 Sphinx 的开源 Python 项目的文档。托管使用 Sphinx 构建的文档的最佳方式是生成 HTML 构建,并将其作为你选择的 Web。记住,大多数的 bug 与错误的语法使用无关,而是与逻辑错误和细微的误解有关,它们可。你无法可靠地区别软件中一直存在的 bug 之间的区别,有的是新引入的,有的部分在前一。从消费者的角度看,Sphinx 真的提高了文档的可读性和用户体验。这体现为一些功能和特性在以前版本的软件中正常工作,而在项目开发中的某。
2025-09-21 10:09:47
467
原创 Python 高手编程系列三千四百七十八:构建自己的文档集
请记住:mod:以及前面的元素是由 Sphinx 在 reSTructuredText 中引入的具体指令。这将会在索引页中添加两个新条目,即 Database Access 和 Session。最后,Sphinx 提供了一个行内标记来设置交叉引用。这里,:mod:是模块标记的前缀,是要链接到的模块的名称(如先前注册。
2025-09-21 10:08:49
492
原创 Python 高手编程系列三千四百七十七:链接
用 Python 做事情(参考 http://code.activestate.com/recipes/langs/python/)。docs.djangoproject.com/en/1.9/intro/tutorial01/)解释如何使用 Django 构建应用程序。模块的 docstring 的目的是可以在模块的顶部写入文本。一个技巧(recipe)文档解答一个非常具体的问题,并提供一个解决方案来解决问题。这是框架应用程序中的文档的。● 教程:这是一个逐步的文档,说明如何使用软件的功能。
2025-09-21 10:08:18
781
原创 Python 高手编程系列三千四百七十六:章节结构
reST 提供了易读的自动枚举特性的列表语法(运行结果参见图 9-2),主要有:无序列。如果不想保留单个冒号,可以在前面的文本和::之间插入一个空格。请注意,冒号字符可以放在文本行中。在这种情况下,它将被渲染为单个冒号。表,枚举列表和自定义列表。将被解释并且完全删除。
2025-09-21 10:07:40
391
原创 Python 高手编程系列三千四百七十五:使用现实中的代码示例
Foo 和 bar 是坏成员。当读者试图通过一个使用示例来理解一段代码如何运行时,不切实际的示例会让代码难以理解。为什么不使用现实中的例子?通常的做法是确保每个代码示例都可以剪切并粘贴到一个真正的程序中。
2025-09-21 10:07:09
621
原创 Python 高手编程系列三千四百七十四:7 项技术写作规则
这并不总是很明显,因为一个技术文本解释了一个软件如何工作,并且通常为每个可能获取和使用代码的人而写。● 如果你不是一个真正优秀的作家,不要在文本中讲笑话。在技术文本中滑稽是很难的,很少有作家掌握它。Atomisator 是一个产品,它提取 RSS 源并将其保存在数据库中,并带有筛选功能。每个开发人员都能够输出这样的材料,本节提供了 7 个规则,可以应用在所有情况下。开发者开始写一个持续的流,当他或她犯语法错误,或任何东西,只。一个好的做法是当他们出现时将它们写在第二张纸或屏幕上,这样它们就不会丢。
2025-09-21 10:05:48
404
原创 Python 高手编程系列三千四百七十三:选择正确的工具和常见的陷阱
问题的解决方案是保持你的构建过程的定义尽可能接近源。这是一个很好的方法,静态分析检查可以作为 CI 构建的一部分进行,样的解决方案为你的构建添加了更多的复杂性,而不是减少。它很容易开始,并将给你几乎即时的满足与最小量的工作。如前所述,没有完美的 CI 工具可以适合每个项目,最重要的是,它使用的每个组织和工作。在一些可用的 CI 系统中,比在其他系统中更可能犯某些错误。例如,当你的 CI 中的自动验收测试的速度成为问题时,那么你可以。需要很多时间,通常意味着,它应该分成几个独立的组件,可以单独开发和测试。
2025-09-21 10:04:58
226
原创 Python 高手编程系列三千四百七十二:持续交付
和编译器遵循良好的设计实践,并且它们通过适当的退出代码指示故障,并在 sdout 或 stderr 输出流上返回可读的错误/警告消息。通常没有选择,所有的构建必须在 Ubuntu 或 Mac OS X(仍然在编写本书时的实验)的一些版本中进行。的方法,其中所有验收测试是自动化的,不需要客户的手动批准。项目之一,与 Hudson 配对(这两个项目的开发是分开的,Jenkins 是 Hudson 的一个派生)。一环境中执行所有的构建步骤,所以它的工作方式更像 Jenkins 或 Buildbot 的从服务器。
2025-09-10 19:50:51
275
原创 Python 高手编程系列三千四百七十一:持续的开发过程
使用这样的工具的好处是,开发者可。有很多过程,可以大大简化你的开发,并减少应用程序从准备到发布或部署到生产环境中的时间。如果你的代码需要在不同的环境中测试,矩阵测试(matrix testing)是一个非常有用的。但是对于简单的 GitHub 工作流来说,这是一个真正的问题,对于诸如 C 或 C ++之类的语言,这是显而易见的,因。过更快的并行构建和更昂贵的 CI 计划,比你跳过选择更改的测试,你可以节省更多的费用。杂,其中许多特性分支是同时开发的,因为存在不能由任何 CI 系统自动解决的高冲突风险。
2025-09-10 19:50:19
428
原创 Python 高手编程系列三千四百六十九:集中式系统
原理很简单,每个人都可以得到他/她的系统上的文件的副本,然后对它们进行更改。从那里,每个用户可以向服务器提交(commit)他/她的更改。可以从主干修订版本上进行派生,分开进行更改,然后把更改再合回主干修订版本。这样的一个中央仓库,通常称为上游(upstream),也可以作为追踪所有团队成员的各个仓。例如,复杂的更改涉及大量文件,也非常耗时,并且在整个工。构的版本控制系统有明显的问题,所以,大多数开源社区已经切换到架构更可靠的分布式。最后,用户负责备份自己的仓库,而在集中式基础设施中则不是这样,通常是。
2025-09-10 19:49:47
337
原创 Python 高手编程系列三千四百六十八:CFFI
CFFI 是 Python 的外部函数接口,是 ctypes 的一个替代品。它不是标准库的一部分,但是它作为一个 cffi 包,可以很容易地从 PyPI 上获得。它不同于 ctypes,因为它更加强调重用纯 C 代码,而不是在单个模块中提供大量的 Python API。它的方式更复杂,并且还有一个特性,它允许你使用 C 编译器将集成层的某些部分自动编译为扩展。因此,它可以用作填补 C 扩展和 ctypes 之间差距的混合解决方案。因为它是一个非常大的项目,不可能用很少的段落就能快速地介绍它。
2025-09-10 19:49:16
407
原创 Python 高手编程系列三千四百六十七 :函数和方法
函数和方法的名称应该使用小写加下划线。但在旧的标准库模块中并不总是这样。Python 3 对标准库做了大量重组,所以大多数函数和方法都有一致的大小写。不过对于某些模块(例如 threading)而言,你可以访问使用混合大小写(mixedCase)的旧的函数名称(例如 currentThread)。留着它们是为了更容易向后兼容,但如果你不需要在旧版Python 中运行代码,那么应该避免使用这些旧的名称。
2025-09-10 19:48:43
332
原创 Python 高手编程系列三千四百六十六 :命名和使用
常量用来定义程序所依赖的一组值,例如默认配置文件名。好的做法是将所有常量集中放在包中的一个文件内。举个例子,Django 采用的就是这种方法。一个名为 settings.py 的模块提供所有常量,如下所示:SQL_USER = ‘tarek’SQL_PASSWORD = ‘secret’SQL_URI = ‘postgres://%s:%s@localhost/db’ % (SQL_USER, SQL_PASSWORD)MAX_THREADS = 4另一种方法是使用可以被 ConfigPar
2025-09-10 19:47:07
344
原创 Python 高手编程系列三千四百六十五 :Hy
如果你想接受来自其他程序员的任何协作,即使你对最佳代码风格指南有不同的看法,那么也应该坚持遵守 PEP 8。Hy(http://docs.hylang.org/)是完全用 Python 编写的 Lisp 方言。有.hy扩展名的模块都被看作Hy模块,都可以像普通Python模块那样导入。要记住,比遵守 PEP 8 更重要的是项目内的一致性。做的争吵,可能会变成一场永无止境并且永远没有赢家的口水战(flame war)。而且,如果整个项目的代码库处于成熟的开发状态,那么对其重新调整风格(restyling)
2025-09-10 19:46:11
323
原创 Python 高手编程系列三千四百六十三:一些关于代码生成的提示
虽然类的调用签名相当严格,但 Python 并不强制要求返回参数的类型。and eval in Python(参见 http://lucumr.pocoo.org/2011/2/1/exec-in-python/)。”换句话说,即使你有一丝的怀疑,也不应该使用它们,而应该尝试寻找其他解决方法。• exec(object, globals, locals):这一函数允许你动态执行 Python 代码。对于元编程而言,最有用的显然是 exec(),因为它可以执行任意 Python 语句的序列。
2025-09-10 19:45:31
394
原创 Python 高手编程系列三千四百六十:使用 C 或者 C++编写扩展
幸运的是,distutils 和 setuptools提供了辅助程序将编译好的扩展定义为模块,因此编译和分发可以使用 setup.py 脚本处。Debian/Ubuntu 中的 python-dev),但是在 Windows 下,它是默认分发的,可以在 Python 的。不幸的是,在 C 和 C++中,直接使用 Python/C API 编写自己的扩展是相当苛刻的。理,就像它们是普通的 Python 包。Pyrex 这样的工具,它们仅仅出于扩展的目的而提供了 Python 语言的超集,实际上它们只。
2025-09-10 19:44:42
249
原创 Python 高手编程系列三千四百五十九:基本的低级日志实践
格式的支持,例如 Apache/Nginx 的访问日志。Logstash 进程无法处理原始日志文件被移动或删除的情况,因此,Supervisor 和 Circus 都能够处理被管理进程的日志转储和保留,但是你应该考虑这是。是你唯一想要处理和归档的日志。流行的 Linux 发行版,那么很可能每个服务自己的日志文件都被一个叫作 logrotate 的。Fluentd 的最佳事件格式是 JSON,因为它增加的开销最小。将现有服务与 Logstash 集成非常简单,因为它可以监听现有日志文件对新事件的更改,
2025-09-10 19:44:11
248
原创 Python 高手编程系列三千四百五十八:监控系统与应用指标
python 是用 Python 编写的(https://github.com/agroszer/munin-node-python)。munin-node-c 是用 C 编写的(https://github.com/munin-monitoring/munin-c),munin- node-有一个 munin-python 包(http://python-munin.readthedocs.org/en/latest/),可以帮助你用。
2025-09-10 19:43:41
228
原创 Python 高手编程系列三千四百五十七:代码检测与监控
另一个值得注意的集成是能够跟踪通过 Python 内置 logging 模块记录的消息。启用这种支持只需要添加几行代码,如下所示:捕获 logging 消息可能会有一些不太明显的警告,因此如果你对这一功能感兴趣,请务必阅读有关这一主题的官方文档。这应该可以让你避免不愉快的意外。最后还有一点,就是运行你自己的 Sentry 可以省钱。“天下没有免费的午餐”,你最终将支付额外的基础设施费用,而 Sentry 只是另一项需要维护的服务。维护=额外工作=成本!
2025-09-10 19:43:10
372
原创 Python 高手编程系列三千四百五十五:常见约定与实践
(Filesystem Hierarchy Standard,FHS),它定义了 Unix 和类似 Unix 的操作系统中的目录结构和。在 Python 社区中,管理应用进程的两个常用工具是 Supervisor(http://supervisord.org)upstart 和 runit)下运行 Circus,尤其是从系统包仓库中安装 Circus 的情况。不管怎样,Supervisor 无法在 Python 3 中运行,所以它不会得到我们的祝福。不幸的是,在大多数情况下,它们并不适合于运行用户级的。
2025-09-10 19:42:27
295
原创 Python 高手编程系列三千四百五十四:你自己的包索引或索引镜像
你可能会想要运行你自己的 Python 包索引,主要有以下 3 个原因。● 官方的 Python 包索引没有任何可用性保证。因此,它往往意味着网站可能会倒闭。你不希望由于 PyPI 的故障而中途停止部署或打包过程。● 即使是不会公开发布的闭源代码,将 Python 编写的可复用组件正确打包也很有用。它简化了代码库,因为公司内用于不同项目的包不需要供应(vendored)。你可以从仓库直接安装这些包。
2025-09-10 19:41:58
412
原创 Python 高手编程系列三千四百五十三:十二要素应用
无痛部署的主要要求是确保构建应用的过程尽可能简单和流畅。这主要是清除障碍并鼓励成熟的做法。在有些组织中,只有特定的人负责开发(开发团队,Dev),而不同的人负责部署和维护执行环境(运营团队,Ops),那么遵守这些常见做法就特别重要。与服务器维护、监控、部署、配置等相关的所有任务都统称为运营(operations)。即使在某些组织中没有单独的运营团队,通常也只有一部分开发人员被授权执行部署任务并维护远程服务器。这一职位的通用名称是 DevOps。此外,开发团队的每名成员都负责运营。
2025-09-10 19:40:48
865
原创 Python 高手编程系列三千四百五十二:可执行包中 Python 代码的安全性
• 用复杂的方式修改 CPython 源代码版本,这样即使得到了应用的反编译源代码,没。• 运行时删除所有可用的代码元数据(文档字符串),从而稍微降低最终结果的可读性。最重要的是应用的构建方式,以及将其部署到目标环境中所使用的流程。行文件中反编译嵌入代码并不是一件容易的任务,但它的确是可行的。执行文件并不是一个可行的解决方案。一旦你的把戏被识破了,你所有额外的努力都将变成时间和资源的。适合你的打包需求,也知道你的项目需要哪种类型的发行版。的应用仅提供向用户销售的服务,那么你有责任在自己的基础设施上运行它。
2025-09-06 10:04:44
233
原创 Python 高手编程系列三千四百五十一:cx_Freeze
cx_Freeze(http://cx-freeze.sourceforge.net/)是另一种用于创建独立可执行文件的工具。它是一种比 PyInstaller 更加简单的解决方案,但也支持 3 个主要平台:• Windows;• Linux;• Mac OS X。与 PyInstaller 一样,它不允许我们执行跨平台构建,因此你需要在想要分发的同一个操作系统中创建可执行文件。cx_Freeze 的主要缺点是它不允许我们创建真正的单文件可执行文件。
2025-09-06 10:03:49
645
原创 Python 高手编程系列三千四百五十:独立可执行文件
在介绍 Python 代码打包的材料中,创建独立可执行文件是经常被忽略的一个主题。这主要是因为 Python 标准库中缺少合适的工具能够让程序员创建简单的可执行文件,用户不需要安装 Python 解释器就可以运行这些可执行文件。与 Python 相比,编译语言有一个很大的优点,就是它允许为给定的系统架构创建可执行的应用程序,用户不需要知道底层技术就可以运行。Python 代码作为一个包分发时,需要有 Python 解释器才能运行。这对于没有足够技术水平的用户来说造成了很大不便。
2025-09-06 10:03:28
836
原创 Python 高手编程系列三千四百四十九:源代码包与构建包
Linux 的系统或 Mac OS 中很常见,因为这些系统通常都会提供编译器,但这在 Windows。• build_ext:构建 C 扩展,并像 build_clib 一样将结果放在构建文件夹中。为了能够分发预构建的发行版,distutils 提供了 build 命令,可以通过 4 个步骤。sdist 发行版中,如果包里面包含 C 库或扩展,那么目标系统将负责编译它们。源代码发行版是最简单的,也是最不依赖于平台的。版本被用于标记存档名称,这个存档可以在任何拥有 Python 的系统上分发并安装。
2025-09-06 10:01:32
447
原创 Python 高手编程系列三千四百四十八:上传一个包
包与用户绑定,因此在默认情况下,只有注册了包名称的用户是它的管理员,并且可以上传新的发行版。任何人都可以免费上传新的包,唯一的要。你唯一需要的是一个包管理器,可以从 PyPI 下载新的发行版。对于 Python 包而言,如果没有有组织的保存、上传和下载方式,那么它是没有用的。使用 setup.py 进行上传时,你不能重复使用已经构建的发行版,每次上传时都必须。些打包用法的细节,以及关于如何创建你自己的包索引的说明。于大型项目来说,这可能是一个问题,因此有一个选项可以指定其他用户作为包的维护者,
2025-09-06 10:01:02
414
原创 Python 高手编程系列三千四百四十七:PEP 420 — 隐式命名空间包
不幸的是,在写作本书时,setuptools.find_packages()还不支持 PEP 420。在 3.3 版以前的 Python 版本中,无法使用 PEP 420 布局中的命名空间包。个包含 Python 包或模块(也包括命名空间包)的目录来说,如果它不包含__init__.py。念非常古老,也常用于像 Zope 这样的成熟项目,因此完全可以使用它,但是没有隐式定义。.py 文件中声明命名空间,并且未来可能会删除 setuptools 的这个隐式行为。最简单的方法不一定是最好的。
2025-09-06 10:00:25
390
原创 Python 高手编程系列三千四百四十六:setup.py develop 或 pip -e
构的 Acme 公司,共同的命名空间可以是 acme。与 SQL 相关的库,那么他可以创建一个在 acme 中注册自己的新的 acme.sql 包。如果你想添加一个新的子包 — 例如 templating,就会被迫将其包含在 acme 的源。可以编辑包的源代码而无需重新安装,并且它在 sys.path 中可用,就像正常安装一样。可以将命名空间包理解成在高于元包(meta-package)的层面对相关的包或模块进行分。常是一个被忽略的功能,在你的组织中或者非常大的项目中对于构建打包生态系统非常有用。
2025-09-06 09:58:26
325
原创 Python 高手编程系列三千四百四十五:管理依赖
许多项目需要安装和/或使用一些外部包。如果依赖列表很长的话,就会出现一个问题:如何管理依赖?在大多数情况下答案很简单。不要过度设计(over-engineer)问题。保持简单,并在 setup.py 脚本中明确提供依赖列表,代码如下:setup(
2025-09-06 09:57:52
463
原创 Python 高手编程系列三千四百四十四:常见模式
对于没有经验的开发者来说,创建一个用于分发的包可能是一项乏味的任务。如果不考虑元数据可能在项目其他部分找到的事实,setuptools 或 distuitls 在 setup()函数调用中接受的大多数元数据都可以手动输入,代码如下:setup(“”",‘etc’,这么做当然可行,但从长远来看很难维护,并且未来可能会出现错误和不一致。setuptools 和 distuitls 都不能从项目源代码中自动提取各种元数据信息,因此你需要自己提供这些信息。
2025-09-06 09:41:52
725
原创 Python 高手编程系列三千四百四十三:setup.cfg
setup.cfg 文件包含 setup.py 脚本命令的默认选项。如果构建和分发包的过程更加复杂,并且需要向 setup.py 命令中传入许多可选参数,那么这个文件非常有用。你可以按项目将这些默认参数保存在代码中。这将使你的分发流程独立于项目之外,也能够让包的构建方式与向用户和其他团队成员的分发方式变得透明。setup.cfg 文件的语法与内置 configparser 模块提供的语法相同,因此它类似于常见的 Microsoft Windows INI 文件。
2025-09-06 09:41:02
922
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人