2014-02-10 57 views
0

我正在pypy並添加路徑bitarray庫sys.path後,我仍然無法導入模塊:如何使用pypy導入bitarray?

Python 2.7.3 (87aa9de10f9ca71da9ab4a3d53e0ba176b67d086, Feb 10 2014, 05:26:49) 
[PyPy 2.2.1 with GCC 4.7.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
And now for something completely different: ``every VM should come with neural 
network trained to recognize microbenchmarks and randomly fluctuate them 
+/-9000%'' 
>>>> import sys 
>>>> sys.path.append('/usr/local/lib/python2.7/dist-packages/') 
>>>> sys.path.append('/usr/local/lib/python2.7/dist-packages/bitarray/') 
>>>> import bitarray 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/bitarray/__init__.py", line 11, in <module> 
    from bitarray._bitarray import _bitarray, bitdiff, bits2bytes, _sysinfo 
ImportError: No module named bitarray._bitarray 

在常規的Python(CPython的從資質安裝)進口bitarray工作正常,我的天堂」在用pip安裝之後,對模塊進行了任何修改。這裏有什麼問題?

以防萬一你需要它這裏是bitarray目錄的內容:

$ls /usr/local/lib/python2.7/dist-packages/bitarray/ 
_bitarray.so __init__.py __init__.pyc test_bitarray.py test_bitarray.pyc 

UPDATE

爲pypy創建的virtualenv並與PIP安裝bitarray晴天后建議我仍然得到一個ImportError:

$ ls my-pypy-env/site-packages/bitarray 
_bitarray.pypy-22.so __init__.py __init__.pyc test_bitarray.py test_bitarray.pyc 


$ cd my-pypy-env/ 
~/my-pypy-env$ ./bin/activate 
~/my-pypy-env$ pypy 
Python 2.7.3 (87aa9de10f9ca71da9ab4a3d53e0ba176b67d086, Feb 10 2014, 05:26:49) 
[PyPy 2.2.1 with GCC 4.7.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
And now for something completely different: ``__xxx__ and __rxxx__ vs operation 
slots: particle quantum superposition kind of fun'' 
>>>> import sys 
>>>> sys.path.append('/home/sofia/my-pypy-env/site-packages/bitarray') 
>>>> import bitarray 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named bitarray 

UPDATE 2

Sunny的解決方案是正確的。新問題是追加/site-packages/bitarray 而不是/site-packages/。我會雖然這virtualenv會自動添加到路徑,但它似乎沒有。

回答

2

_bitarray模塊看起來像一個CPython擴展,它直接寫在C。 CPython擴展模塊不是直接在PyPy中工作,沒有任何更改。您需要安裝模塊的PyPy兼容版本,或手動執行所需的更改。

要安裝pypy兼容的版本,請使用以下命令:

# If pypy is installed globally 
/path/to/pypy/pypy-2.1/bin/pip install bitarray 

# If using virtualenv 
source /path/to/virtualenv/env/bin/activate 
pip install bitarray 

這裏有一些關於這個問題從PyPy常見問題解答鏈接:

http://doc.pypy.org/en/latest/faq.html#module-xyz-does-not-work-with-pypy-importerror

http://doc.pypy.org/en/latest/faq.html#do-cpython-extension-modules-work-with-pypy

+0

有任何方式來確保bitarray是用C編寫的? –

+0

不是整個bitarray,而是ImportError中的submodule'bitarray._bitarray'。是的,它是:查看'_bitarray.so'文件的'.so'擴展名。 –

+0

請注意,在virtualenv中運行'pip install bitarray',如上面的鏈接所述,似乎工作正常。它成功編譯C代碼,不需要用sys.path破解。 –