2011-07-16 28 views
4

Python源文件中包含一個名爲knee.py的文件。它用自己的鉤子覆蓋常規導入語句。代碼應該是正確的,對於內置模塊和單個文件模塊來說,它是正確的。然而,當我嘗試導入numpy時,我得到了一個奇怪的錯誤(兩種不同)。用「knee.py」導入numpy和scipy的神祕錯誤

(...long stack trace) 
    File "knee.py", line 101, in import_module 
    m = imp.load_module(fqname, fp, pathname, stuff) 
TypeError: import_hook() takes at most 4 arguments (5 given) 

我不明白爲什麼會發生這種情況?難道還有self也被傳遞了嗎? knee.py中的代碼都不是針對某個對象編寫的,而且我非常肯定imp.load_module不希望self參數。有沒有人有一個想法,以什麼可能導致這個問題?我甚至還記錄了導入的內容,並且似乎代碼不會立即出現問題,只是在它以numpy導入其他某些內容之後。

對於SciPy的情況下,我得到一個錯誤,這可能與該numpy的事件:

(...long stack trace) 
    File "/usr/apps/python2.6/lib/python2.6/site-packages/numpy/core/__init__.py", line 10, in <module> 
    import _sort 
    File "knee.py", line 16, in import_hook 
    q, tail = find_head_package(parent, name) 
    File "knee.py", line 52, in find_head_package 
    q = import_module(head, qname, parent) 
    File "knee.py", line 101, in import_module 
    m = imp.load_module(fqname, fp, pathname, stuff) 
ImportError: numpy.core.multiarray failed to import 

有沒有人有什麼可以怎麼回事的想法?

+0

您是否試過用另一個python C擴展? (比如'cStringIO'或standal庫中的其他東西?)我也沒有確切的線索,但它有助於縮小它是否是一個特定於numpy的問題或一般的C擴展問題。 –

+0

cStringIO工作正常。 – Tim

回答

1

已解決。(只保證封裝模塊numpy和scipy的解決方案)

我實現了我自己的解決方案。要小心,雖然我在這裏發佈的代碼有效,但它包含了一堆愚蠢的調試語句,並註釋掉了可以刪除的代碼,以及做了一些與我想要使用的代碼相關的其他內容。

我的解決方案:mknee.py

+0

Tsk tsk tsk - 斷開的鏈接 –