2 に答える
いじり回しはsys.path()
苦痛につながります...最新のパッケージテンプレートと配布には膨大な情報が含まれており、問題を解決するために部分的に設定されています.
私がすることは、setup.py をセットアップして、すべてのパッケージを特定のサイト パッケージの場所にインストールするか、システムのサイト パッケージにインストールできるかどうかです。前者の場合、ローカル サイト パッケージがシステム/ユーザーの PYTHONPATH に追加されます。後者の場合、何も変更する必要はありません
バッチ ファイルを使用して Python パスを設定することもできます。または、変更された PYTHONPATH を含むシェル スクリプトを指すように python 実行可能ファイルを変更し、python インタープリターを実行します。もちろん、後者は、ユーザーのマシンにアクセスする必要があることを意味しますが、アクセスする必要はありません。ただし、ユーザーがスクリプトのみを実行し、独自のライブラリをインポートしない場合は、スクリプトに独自のラッパーを使用できます。
#!/path/to/my/python
/path/to/my/python
スクリプトは次のようになります。
#!/bin/sh
PYTHONPATH=/whatever/lib/path:$PYTHONPATH /usr/bin/python $*
モジュールを検索するときにPythonの動作を変更できるパスインポートフックを確認する必要があると思います。
たとえば、Pythonプラグイン[1]に対してkdeのscriptengineが行うようなことを試みることができます。に特別なトークンを追加しsys.path
(名前の衝突を避けるために乱数に"<plasmaXXXXXX>"
するXXXXXX
など)、Pythonがモジュールをインポートしようとして他のパスでモジュールが見つからない場合、それを処理できるインポーターを呼び出します。
より簡単な代替方法はsys.path
、ターゲットファイルへのパスを追加して実行するだけのランチャーとしてメインスクリプトを使用することです(これにより、すべてのファイルに行を配置することを安全に回避できsys.path.append(...)
ます)。
python2.6 +で動作するさらに別の方法は、ユーザーごとのsite-packagesディレクトリの下にライブラリをインストールすることです。
/usr/share/kde4/apps/plasma_scriptengine_python
[1]ソースコードはkdeを使用したLinuxインストールで見つけることができます。