5

このトピックに関する関連スレッドがいくつかありますがこれらは少し古くなっているようです

Python 3.3.0 が組み込まれた LibreOffice 4 をダウンロードしました。その Python を使用すると、UNO をインポートして問題なく使用でき、Python スクリプトから Office を制御できます。しかし、私の他のモジュールの多くは、その Python にはありません。私の Python に欠けているのは UNO だけです。

ローカルの Python に pyuno をインストールする方法はありますか? LibreOffice ソース ツリーには pyuno/ ソース ツリーが含まれていますが、これを別の Python ツリーに構築/統合する方法がわかりません。

ここでの経験はありますか?ヘルプ?ヒント?すべきこと、すべきでないこと、すべきことは?

EDIT以下の回答PYTHONPATHは Linux で問題なく機能します。uno をインポートするために拡張しても問題ありません。Mac では問題が異なるため、他の回答をご覧ください。

EDIT Pythonパスをいじるときは、この答えを絶対に考慮してください!

4

4 に答える 4

4

LO で提供されているもの以外の python 実行可能ファイルから PyUNO を実行しようとすると、事態は悪化します。

Mac での SEGV は、LO の libpyuno.dylib (libuno.dylib を介してロードされ、"import uno" を介してロードされる) が @loader_path/LibreOfficePython.framework/Versions/3.3/LibreOfficePython ("otool -L" を実行) を参照するためです。ファイル; 現在の LO マスターのパス; パスは、さまざまな LO バージョンで少し異なります)。LO とは異なる Python プロセスから実行すると、プロセス内に 2 つの Python ランタイムが存在し (LO はおそらく適切に初期化されていない)、その LibreOfficePython のどこかに SEGV が発生します。(これはたまたま、libpyuno.so が libpython3.3m.so を参照する Linux でうまく機能し、通常はその RPATH を介してそれ自体の隣にある LO python を見つけますが、libpython3.3m.so がプロセスに既にロードされている場合(他のpythonから)、

Mac での大まかなハックの 1 つは、install_name_tool を使用して libpyuno.dylib を「再配線」し、@loader_path/LibreOfficePython.framework/Versions/3.3/LibreOfficePython の代わりに、他の python の Python.framework/Versions/3.3/Python (絶対パスで) を参照することです。

もう 1 つの落とし穴は、LO の python (Linux および Mac で) は、実際には真の python 実行可能ファイルの周りのシェル スクリプトであるということです。多くの環境変数を設定する必要があります (その目的はスクリプトにも記載されています)。PyUNO を別の python から動作させるには、これらの環境変数も設定する必要があります。UNO_PATH、URE_BOOTSTRAP、および LO 固有のライブラリ (Python 自体に付属するものではなく) を見つける PYTHONPATH の部分。これらの環境変数の値の詳細は、LO バージョンによって異なることに注意してください。

于 2015-02-18T20:36:06.550 に答える
2

それは遅い答えであり、私はあなたとまったく同じ設定を持っていませんが、私にとっては、生きPYTHONPATHているディレクトリがuno.pypythonに認識されるように単純に調整できました.

bash> export PYTHONPATH=${PYTHONPATH}:/usr/lib/libreoffice/program
bash> python
>>> import uno

要件は、LibreOffice/OO Python が通常のものと同じバージョンであることです: Python は .py を .pyc にコンパイルし、その形式はバージョン間で転送できません (少なくとも、保証されていません)。

ファイルの場所がわからないlocate uno.py場合は、 を実行してください。リンク先を調べる/usr/bin/libreofficeことも役立つ場合があります。

于 2013-10-03T11:54:06.513 に答える
0

Linux

このスレッドに対する dirkjot の回答は、Linux でうまく機能します。

マック(ヨセミテ)

ここではもう少し注意が必要です.LibreOffice 4.3の時点では、MacでクラッシュせずPYTHONPATHにLibreOfficeに拡張することはできません:import uno

localhost ~ > PYTHONPATH=$PYTHONPATH:/Applications/LibreOffice64.app/Contents/MacOS python3.3
Python 3.3.6 (default, Nov 12 2014, 18:18:46) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.54)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
Segmentation fault: 11

しかし、これが私にとってうまくいくものです。まず、 Python と私の LibreOffice の両方が 32b または 64b 用にビルドされていることを確認する必要があります。それらを混在させることはできません。私は 64b MacPorts Python 3.3 と 64b LibreOffice for Mac (ダウンロード リンク) を Python 3.3 に付属しています。次に、適切な Python を実行し、PYTHONPATH正しく拡張する必要があります。MacPorts Python を実行して LibreOffice のパスで拡張することはできないため、逆の方法で実行する必要があります: LibreOffice Python を実行し、MacPorts Python パスで拡張します。

localhost ~ > PYTHONPATH=$PYTHONPATH:/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages /Applications/LibreOffice64.app/Contents/MacOS/python
Python 3.3.5 (default, Dec 12 2014, 10:33:58) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.51)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
>>> import lxml
>>> 

unoが LibreOffice の Python パスからインポートされ、lxmlMacPort の Python パスに存在することに注意してください。

于 2015-01-16T01:05:31.697 に答える