[英]import the development version of a module over the version that is installed in site-packages
[英]How to import a module installed in site-packages
我已對此進行更新,以更改如何從.so文件導入的問題,該文件已經有一個名為.py的前端。
在CentOS 6.6上,我安裝了Python 2.6.6,並且我正在嘗試安裝InformixDB-2.5。
python setup.py build_ext
命令返回一些警告,但是gcc
步驟完成而沒有錯誤。
以root python setup.py install
完成python setup.py install
命令,沒有錯誤。
我的問題是當我運行Python並輸入import informixdb
,出現模塊未找到錯誤
我已經閱讀了這篇文章 ,並且在站點包中已經有一個_informixdb.so
和_informixdb.so
。 如果我從該目錄調用Python並import informixdb
,則不會出錯。 我只是不確定要設置哪個環境變量來進行選擇,或者不確定是否應該對此進行符號鏈接,但是不知道該如何符號鏈接。
這是python setup.py install
的輸出
running install
running build
running build_py
running build_ext
running install_lib
running install_egg_info
Removing /usr/lib/python2.6/site-packages/InformixDB-2.5-py2.6.egg-info
Writing /usr/lib/python2.6/site-packages/InformixDB-2.5-py2.6.egg-info
這是錯誤
[dbadmin@bucky InformixDB-2.5]$ python informixdb.py
Traceback (most recent call last):
File "informixdb.py", line 146, in <module>
from _informixdb import *
ImportError: No module named _informixdb
首先,為了隔離問題,請不要從構建或安裝InformixDB的目錄中調用python或腳本。 而是從您的應用程序所在的任何地方調用它。 從那里看,如果嘗試“ import notifyixdb”,會發生什么。 如果python抱怨找不到“ informixdb”(名稱中沒有下划線),則說明您的Python路徑被弄亂了,您需要修復Python路徑以包含InformixDB的安裝位置。
如果python抱怨它無法導入“ _informixdb”(帶有下划線),請驗證_informixdb.so與notifyixdb.py處於同一位置,並且該文件的權限正確。 如果是這樣,則問題很可能是動態鏈接程序找不到Informix客戶端運行時庫。
要檢查后者是否有問題,請運行命令“ ldd /path/to/_informixdb.so”,然后查看輸出。 它看起來應該像這樣:
carsten@haese:~$ ldd /usr/local/lib/python2.7/dist-packages/_informixdb.so
linux-gate.so.1 => (0x00f47000)
libifsql.so => /opt/informix/lib/esql/libifsql.so (0x001d9000)
libifasf.so => /opt/informix/lib/libifasf.so (0x00999000)
libifgen.so => /opt/informix/lib/esql/libifgen.so (0x00110000)
libifos.so => /opt/informix/lib/esql/libifos.so (0x0039f000)
libifgls.so => /opt/informix/lib/esql/libifgls.so (0x0061d000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x006c5000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00be8000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00342000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x001b1000)
libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0x00220000)
/lib/ld-linux.so.2 (0x0016a000)
如果ldd命令指示未找到任何libifXXX庫,那么這就是您的問題,您需要告知動態鏈接器Informix庫的位置,例如,通過適當地設置LD_LIBRARY_PATH環境變量或將其添加到etc / ld.so.conf.d以某種方式運行ldconfig。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.