2013-06-21 67 views
4

我有一位客戶正在運行SUSE Enterprise Server 11,我想在其上使用名爲PyUNO的OpenOffice-Python-Bridge的django-project。它運行一個帶有mod_wsgi的apache2,沒有virtualenv或其他東西。在django中運行PyUNO

我加入了相關的路徑PYTHONPATH,但是當我運行一個shell python manage.py shell,並嘗試import uno,我得到這個錯誤:

dynamic module not initialized properly 

它的OpenOffice 3.4,蟒蛇的2.6.x(無論是從SUSE-DVD )。

Google讓我變成了一個系統變量LD_LIBRARY_PATH,但是一旦我設置了它,我就無法再啓動shell了,因爲python找不到django了(PYTHONPATH似乎被破壞了)。如果我運行另一個常見提議ldconfig -v /path/to/openoffice/program/,結果是一樣的。

做完上述之一後,我可以運行系統範圍的python並導入uno。但是我不能再運行django-shell,因爲沒有找到django。

如果我重置LD_LIBRARY_PATH(通過unset LD_LIBRARY_PATHldconfig),我會遇到「舊」情況。

OpenOffice捆綁了一個python二進制文件。這個可以導入uno而不會出錯。

結果: 我想過使用其他uno.py或以某種方式告訴Apache2的使用哪個來與OpenOffice的蟒蛇版本。我該如何做這樣的事情或將相關的pyuno-dependencies添加到由apache使用的python-version?或者哪個版本的openoffice/pyuno可以解決我的問題?我想避免在SUSE源代碼中使用mod_wsgi和python。

還有一些關於LD_LIBRARY_PATH的提示可能會有幫助。

+0

如果您設置了'LD_LIBRARY_PATH'而不是'LD_CONFIG_PATH',它會工作嗎? – Aya

+0

啊,對不起。那是我已經使用的變量。我將編輯該問題。 – Marius

+0

好吧,如果你可以在未設置LD_LIBRARY_PATH時導入django模塊,那麼簡單地設置LD_LIBRARY_PATH不應該導致它失敗,也不應該影響到PYTHONPATH。運行django shell時會得到什麼確切的錯誤信息? – Aya

回答

2

LD_LIBRARY_PATH是覆蓋共享庫(通常爲.so)的搜索路徑的變量。

例如,當您設置它時,請導出LD_LIBRARY_PATH =/opt/test/mylibs,使所有應用程序在該位置搜索共享庫。

這解釋了爲什麼django-shell無法運行,因爲它搜索的庫不存在。

好消息是,LD_LIBRARY_PATH可以設置爲多個路徑,以冒號(:)分隔。這樣,您可以導出LD_LIBRARY_PATH =/opt/test/mylibs:/ opt/another/path

如果您設法找到所需的庫所在的位置,則可以將它們的路徑追加到LD_LIBRARY_PATH中,足以解決你的問題。

我不知道,但是如果這是你面臨的真正問題,但我認爲這可能會讓你對這個變量的含義有所後知後覺。

+0

嗯,這可以幫助我。至少這是值得一試的。但是我需要實際的LD_LIBRARY_PATH,以便我可以添加相關路徑而不覆蓋舊條目。我會嘗試將缺少的路徑添加到/etc/ld.so.conf並重新運行ldconfig。希望這會有所幫助。 – Marius

+0

將openoffice/program的路徑添加到/etc/ld.so.conf.d/*.conf中並沒有幫助。 – Marius