私は(ここで)PyPyがcpyextを介してCPython拡張モジュールをサポートしていることを読みました。
cpyextのドキュメントが見つかりません。ありますか?
どうやって使うの?
ソースコード(例:ここleveldb.so
)から、モジュールをロードするには、おそらくこれを行う必要があることがわかりました。
import cpyext
cpyext.load_module("leveldb.so","leveldb")
ただし、これは次のエラーでクラッシュします。
Fatal Python error: PyThreadState_Get: no current thread
バックトレースで、PyPyからではなくCPythonから関数を呼び出すことに気づきました。
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff8b3e4d46 __kill + 10
1 libsystem_c.dylib 0x00007fff927a9df0 abort + 177
2 org.python.python 0x0000000104692eaa Py_FatalError + 49
3 org.python.python 0x0000000104691370 PyThreadState_Get + 28
4 org.python.python 0x000000010468cf16 Py_InitModule4_64 + 58
5 leveldb.so 0x00000001027e0881 initleveldb + 49 (leveldb_ext.cc:59)
6 pypy 0x0000000100f59bb3 PyLong_CheckExact + 55379
7 pypy 0x0000000100f6e7c7 PyLong_CheckExact + 140391
....