2013-05-30 131 views
0

我遇到了一個奇怪的python模塊導入問題。Python模塊導入差異「string.maketrans」

當我試圖導入boilerpipe模塊,

from boilerpipe.extract import Extractor 

我得到這個異常:

Original exception was: 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/boilerpipe-1.2.0-py2.7.egg/boilerpipe/extract/  __init__.py", line 2, in <module> 
    import urllib2 
    File "/usr/lib/python2.7/urllib2.py", line 94, in <module> 
    import httplib 
    File "/usr/lib/python2.7/httplib.py", line 1140, in <module> 
    import ssl 
    File "/usr/lib/python2.7/ssl.py", line 58, in <module> 
    import textwrap 
     File "/usr/lib/python2.7/textwrap.py", line 40, in <module> 
class TextWrapper: 
    File "/usr/lib/python2.7/textwrap.py", line 82, in TextWrapper 
    whitespace_trans = string.maketrans(_whitespace, ' ' * len(_whitespace)) 
AttributeError: 'module' object has no attribute 'maketrans' 

我已經搜查了互聯網和說,在Python 2.6的 'STR' 模塊已被重命名爲'string'模塊。所以這看起來像是代碼庫中的某個地方沒有正確導入「string」模塊。

然而,真正奇怪的是,當我從home目錄運行Python代碼,並(通過使用python殼或使用python pyfile.py)運行相同的代碼,它工作正常!沒有更多的進口錯誤。

所以我有點混亂。任何人都可以給我任何提示嗎?

謝謝!

回答

3

sys.path中的一些其他腳本被稱爲「string.py」並掩蓋了stdlib模塊。

+0

那麼是什麼使它不同於運行在其他目錄中的'home'目錄? – JXITC

+1

你的主目錄沒有string.py。 –

+0

是的...解決了我的問題。我犯了一個愚蠢的錯誤。乾杯! – JXITC

1

仔細檢查以確保您沒有已導入的文件string.py

要調試這一點,把地方:

import sys 
raise Exception("string module: %r" %(sys.modules.get("string"),)) 

,會告訴你是什麼樣的進口串模塊(或者如果它顯示None,沒有string模塊尚未導入)。

+0

感謝您的回答。然而,關於這個問題只有一行代碼:'from boilerpipe.extract import Extractor'。我無法修改此外部庫的源代碼。而且,我檢查了字符串模塊,並在'home' dir中運行python並在其他dir中運行python時得到了不同的響應。爲什麼不同? – JXITC

+0

嗨,謝謝你回答我的問題。我碰巧發現我自己在我測試的其他dirs中寫了一個「string.py」文件。現在問題解決了。謝謝 – JXITC