2013-02-12 94 views
2

我已經能夠在我的.pyx腳本上使用cython在linux上創建一個.so文件。我也可以成功地在我的Python解釋器上進行導入。如何分發從cython生成的.so文件

我的問題是如何在不使用cython的情況下在最終用戶的機器上安裝.so。我不想將任何.pyx或.py或.c文件分發給最終用戶。而且我也不希望最終用戶安裝cython或其他任何東西來使用我的.so文件

+1

我想你必須確保最終用戶至少有相同的處理器架構。我不確定不同python版本之間的內部兼容性,儘管...爲什麼不向用戶提供一個.c文件? – dmytro 2013-02-13 02:03:10

+0

我不想給他們來源。 :) – user2005803 2013-02-13 02:33:06

+1

然後它是一個死的手:你將不得不爲所有目標平臺編譯自己... – 2013-02-17 13:51:49

回答

2

您可以使用ldd來檢查.so的靜態依賴關係。這裏有一個.so我用Cython建我的Ubuntu桌面上的依存關係:

$ ldd iksolver.so 
linux-vdso.so.1 => (0x00007fffc07fe000) 
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdcabc08000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdcab903000) 
libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007fdcab3d3000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdcab00b000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fdcac068000) 
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fdcaadf4000) 
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdcaabef000) 
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fdcaa9ec000) 
$ 

你可以看到,這取決於安裝了很多其他庫,而且它需要安裝python2.7,但這裏的一切安裝在默認的Ubuntu部署中。請注意,這裏沒有任何要求安裝Cython。

如果使用相同的處理器架構和相同版本的操作系統,您將能夠將.so複製到目標機器上的/usr/local/lib/python2.7/dist-packages,然後您就可以導入它。

當然,如果您的Cython模塊中有任何import語句,您需要確保這些模塊也存在於目標系統上。