2

我对包装 pep8 很感兴趣,所以我可以在使用前对其进行修补。包装模块的“正确”方式是什么?

如果我的模块名为 pep8 并且位于真正 pep8 之前的某个路径中,那么我模块中的任何“import pep8”都只会导入自身。我事先不知道真正的 pep8 会住在哪里,因为这需要针对多个系统进行推广。我无法从 sys.path 中删除我的 pep8 包装器所在的路径,因为它也会根据执行它的系统而有所不同。

我不想重命名我的 pep8,因为我希望 pep8 命令无需修改即可工作。

我的 pep8 是一个包含__init__.py以下内容的目录:

from pep8 import *
MAX_LINE_LENGTH = 119 
4

2 回答 2

1

对于 Python 2.5+,您可以默认指定使用绝对导入。与from __future__ import absolute_import.

对于猴子修补 Python 模块,您需要从项目到覆盖模块的相对导入。

对于这个例子,我假设你正在分发一个库。对于其他项目,它需要一些技巧,因为__main__python 文件不能有相对导入。

myproject/__init__.py

from . import pep8 # optional "as pep8"
# The rest of your code, using this pep8 module.

myproject/pep8/__init__.py

from __future__ import absolute_import
from pep8 import *
MAX_LINE_LENGTH = 119 
于 2012-12-26T21:42:40.170 回答
1

我意识到这是一个老问题,但它仍然出现在谷歌搜索中。对于实际需要这样做的情况(例如:受保护的库包装),我建议使用 WRAPT 包。

我实际上将它用于我有一个模型是核心集的一部分但可以由其他应用程序扩展的实例(例如像烧瓶应用程序这样的前端)。核心模型受到保护,但可以由其他开发人员扩展。

https://pypi.python.org/pypi/wrapt

于 2015-11-12T15:44:29.670 回答