4

Python 名前空間付きパッケージに問題があり、良い解決策は何か疑問に思っています。

私のプロジェクト構造は次のようになります

project_name/ext/app_ext

それが私が取り組んでいるプロジェクトです。同じ名前空間にもある依存関係があります。

project_name/ext/base_ext
project_name/ext/other_dependency

私は、django アプリケーションの「app_ext」名前空間パッケージに取り組んでいます。ただし、受信に問題が発生していno module named app_extます。

依存関係の名前空間パッケージのインストール方法に関係していると思います(PIPでインストールしています)。依存関係の名前空間パッケージは__init__.py、distribute / setuptools のドキュメントに記載されているようにファイルと共にインストールされませんが、実際にはすべてのインストール パッケージに次の宣言が含まれています。

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

では、本当の質問に移ります。関連する名前空間パッケージが既にインストールされている場合に、名前空間パッケージを操作するコツはありますか?

4

1 に答える 1

0

解決策の 1 つは、名前空間付きパッケージのパスを変更して、ローカル パスを追加することです。(Django で作業している場合は、次のようなスニペットを settings.py に追加できます)。

from os import path
import sys

PACKAGE_NAMESPACE = ["project_name", "ext"]
VIRTUAL_PACKAGE = '.'.join(PACKAGE_NAMESPACE)
__import__(VIRTUAL_PACKAGE)
local_package = path.abspath(path.join(*PACKAGE_NAMESPACE))
sys.modules[VIRTUAL_PACKAGE].__dict__["__path__"].insert(0, local_package)

このアプローチは、tiddlywebplugins 名前空間のtiddlywebプロジェクトでも使用されています。

于 2012-06-28T16:45:14.910 に答える