7

編集3:スクリプト/実行可能ファイルの場所を知る必要がある場合は、に置き換え__file__ました。sys.argv[0]これはまったく同じではありませんが、私の場合は正常に動作しているようです(少なくとも実行可能バージョンでは...)。これで、受け入れられた回答の機能を使用してリソースファイルにアクセスし、1ファイルモードですべてが正常に機能しています。


編集2:受け入れられた回答のコメントに示されているように、問題は私のスクリプトのパス解決に起因しています。スクリプトの場所を取得するためにを使用__file__して、そのリソースファイルにアクセスできるようにします。これは、ファイル名をスクリプトに__file__返すため、パッケージ化すると機能しません。そのため、パスはなく、ファイル名だけが返されます。Python.dllしたがって、リソースファイルにアクセスするための別のトリックを見つける必要があります。現時点での回避策は、現在のディレクトリを実行可能パスに移動することです。

ちなみに、これは、ConfigParserがファイルにアクセスするときに問題を報告する必要があることを意味し、セクションが欠落していることではありません。

このパス解決の質問を解決した方法で、この質問を更新します。


に問題がpyinstallerあり、初めて使用するので、何か間違ったことをしたことは間違いありません。

だから、ここに問題があります:pyisntaller私が書いたスクリプトでスムーズに実行され、フォルダにいくつかのものを生成しdistます。さて、今度はそれを実行してすべてがうまくいったかどうかを確認したいと思います。これが私が得たものです:

C:\Program Files\PyInstaller\pyinstaller-1.5.1>p_tool\dist\p_tool\p_tool.exe -?
Traceback (most recent call last):
  File "<string>", line 104, in <module>
  File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/logging.config", line 76, in f
ileConfig
  File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/logging.config", line 112, in
_create_formatters
  File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/ConfigParser", line 532, in ge
t
ConfigParser.NoSectionError: No section: 'formatters'

私の最初のアイデアは、logging.confファイルが欠落しているということだったので、ファイル(および他のいくつかのリソースファイル)をファイルに追加しましたp_tool.specが、これは良くありません。

Pythonバージョン:2.6.6、WinXPで。pyinstallerSolarisワークステーション用のファイルをパッケージ化するために必要になるため、使用しています。

それで、誰かがこの問題を抱えていましたか?関連する唯一のトピックは次の質問です:PyInstallerの問題、本当に私の問題に近いですが、うまくいけば答えが得られませんでした。


Edit3:問題とは実際には関係がないため、ロギングに関する詳細が削除されました。

4

3 に答える 3

10

まず、ファイルを読み取る前に print config_file / os.path.exists(config_file) を実行するのが賢明かもしれません。そうすれば、ファイルがどこにあり、python がそれを見つけられるかどうかを確認できます。

実際にアクセスすることに関しては、os.path.split(__file__)ほぼ正しいように見えますが、pyinstaller の下で適切に動作するかどうかはわかりません。ファイルをパックする適切な方法は、それらを .spec ファイルに追加することです。pyinstaller はコンパイル時にそれらをロードし、解凍します。 $_MEIPASS2/ 実行時に。_MEIPASS2 dir をパック モードで取得し、ローカル ディレクトリをアンパック (開発) モードで使用するには、次のようにします。

def resource_path(relative):
    return os.path.join(
        os.environ.get(
            "_MEIPASS2",
            os.path.abspath(".")
        ),
        relative
    )


# in development
>>> resource_path("logging.conf")
"/home/shish/src/my_app/logging.conf"

# in deployment
>>> resource_path("logging.conf")
"/tmp/_MEI34121/logging.conf"
于 2011-10-25T09:38:52.507 に答える
0

エラー メッセージConfigParser.NoSectionError: No section: 'formatters'は、ファイルが見つからないのではなく、探しているセクションが見つからないファイルであることを示しています。

于 2011-10-24T15:31:57.907 に答える