11

次の構造のPythonプロジェクトがあります。

package1
  class.py
  class2.py
  ...
package2
  otherClass.py
  otherClass2.py
  ...
config
  dev_settings.ini
  prod_settings.ini

これを同じファイル構造のeggに変換するsetup.pyファイルを作成しました。(zipプログラムを使用して調べると、構造は同じように見えます。)面白いことに、IDEからPythonコードを実行すると、正常に動作し、構成ファイルにアクセスできます。しかし、eggを使用して別のPythonスクリプトから実行しようとすると、egg内の構成ファイルが見つからないようです。設定ファイルを呼び出しに関連するディレクトリに配置した場合Pythonスクリプト(eggの外部)は機能しますが、プログラムのすべての機能を備え、どこからでも呼び出すことができる自己完結型のeggを使用するという目的は無効になります。設定ファイルを使用しない限り、任意のクラス/モジュールを使用して、eggから任意の関数を実行できます...しかし、使用すると、eggはそれらを見つけることができないため、関数は機能しません。

どんな助けでも本当にありがたいです!私たちはここで卵のことを少し始めたばかりで、どこから始めればよいのか本当にわかりません。

4

2 に答える 2

12

問題は、設定ファイルがもはやファイルではなく、egg内にパッケージ化されていることです。ドキュメントで答えを見つけるのは簡単ではありませんが、そこにあります。setuptools開発者ガイドから:

通常、既存のプログラムは__file__、データファイルの場所を見つけるためにパッケージの属性を操作します。ただし、この操作は、zipファイルやPython Eggからのインポートなど、PEP302ベースのインポートフックとは互換性がありません。

それらにアクセスするには、ResourceManagementAPIの指示に従う必要があります。

私自身のコードでは、ログ構成ファイルでこの問題が発生しました。私は次のようにAPIを正常に使用しました:

from pkg_resources import resource_stream

_log_config_file = 'logging.conf'
_log_config_location = resource_stream(__name__, _log_config_file)
logging.config.fileConfig(_log_config_location)
_log = logging.getLogger('package.module')
于 2010-06-18T16:25:15.483 に答える
2

実行時にパッケージ化されたデータファイルにアクセスするためのSetuptoolsの説明を参照してください。スクリプトをegg内で機能させるには、構成ファイルを別の方法で取得する必要があります。また、それを機能させるには、空のファイルを挿入して、configディレクトリをPythonパッケージにする必要がある場合があり__init__.pyます。

于 2010-06-18T16:30:39.107 に答える