2012-12-26 73 views
2

我對包裝pep8感興趣,所以我可以在使用前將其修復。什麼是包裝模塊的「正確」方式?包裝python模塊的優雅/正確的方式

如果我的模塊被命名爲pep8,並且在真正的pep8之前的某處存在於我的路徑中,那麼我的模塊中的任何「import pep8」都只會導入它自己。我不知道真正的pep8會在哪裏生存,因爲這需要在多個系統中推廣。我無法從sys.path中刪除我的pep8包裝程序所在的路徑,因爲根據執行系統的位置也會有所不同。

我不想重命名我的pep8,因爲我希望pep8命令可以不加修改地工作。

我PEP8是包含__init__.py具有以下內容的目錄:

from pep8 import * 
MAX_LINE_LENGTH = 119 
+0

有趣的問題回覆:模塊的monkeypatching,但PEP8是PEP8,因爲它是一個標準,即使一些想法被設計用於可能只是偶爾出現的情況。 –

+0

是的。我們打算打破80列的法律。部分符合pep8要比根本不符合要好,如果我不能從E501輸出產生混亂,那會讓我的生活變得更輕鬆。 –

+1

爲什麼不在shell中將'pep8'替換爲'python -m pep8 -max-line-length = 120'? –

回答

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 
+0

我在發佈之前試過。如果我在導入後打印dir(pep8)'',我會得到:'['MAX_LINE_LENGTH','__builtins__','__doc__','__file__','__name__','__package__','__path__','absolute_import ']',這不是「真正的」pep8。 –

+0

另外,我的目標之一是使用操作系統分發的pep8命令,而不必修改它。如果我不得不做上述的相關導入,那是不行的。 –

1

我意識到這是一個老問題,但在谷歌搜索仍然出現。對於實際需要的實例(例如:protected library wrapping),我建議使用WRAPT包。

我實際上使用它作爲實例,我有一個模型是核心集的一部分,但可以通過其他應用程序(如前端應用程序)進行擴展。核心模型受到保護,但可以由其他開發人員擴展。

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