7

多数のファイルを持つ py2exe によって、私の python プロジェクトの exe ファイルを作成しました。システムでこのexeファイルを実行すると。正常に動作しますが、別のシステムに置くとログインフォームが開き、2番目のpythonファイルに書き込んだ次のウィンドウに移動しません。ログファイルに以下のエラーが表示されます。

Traceback (most recent call last):
      File "login.py", line 246, in DataReader
      File "subprocess.pyo", line 711, in __init__
      File "subprocess.pyo", line 948, in _execute_child
    WindowsError: [Error 2] The system cannot find the file specified

重複した質問であることは知っていますが、スタックオーバーフローの多くの解決策を試しましたが、この問題は解決しませんでした。誰かがこの問題を解決するのを手伝ってください。

ログインに成功すると、このコードでstart.pyファイルに移動しますが、上記のエラーが発生せず、移動しません。

    subprocess.call(["python", "./start.py"])

前もって感謝します

4

1 に答える 1

5

ここには少なくとも 2 つの問題があります。


まず、python実行可能ファイルとして使用することはできません。

あなたのシステムには がpythonあり%PATH%、依存するすべてのモジュールなどを備えた適切なPython バージョンです。しかし、すべてのユーザーに対してそれを当てにすることはできません。できればpy2exe、最初からかまわないでしょう。

そして明らかに、テストしている他のマシンでは、 に何も名前が付けられpythonてい%PATH%ないため、WindowsError 2 が発生します。

とにかく、スクリプトが使用しているのと同じPython で実行する必要があります。


その間、start.py現在の作業ディレクトリにあると期待する理由はありません。(できれば) 親スクリプトと同じディレクトリにありますが、それは作業ディレクトリにはなりません。通常、Windows プログラムは C:\、WINNT ディレクトリ、またはユーザーのホーム ディレクトリなどで起動しますが、これはバージョンによって異なります。

もちろん、開発中は、スクリプトを実行するたびにスクリプトのディレクトリを作業ディレクトリとしてコマンド プロンプトを使用するか、同等の機能を効果的に実行する IDE を使用します。だからたまたまうまくいく。しかし、.exe から実行する場合、それは期待できません。

(これはデバッグするのがさらに楽しくなります。サブプロセスは正常に開始され、目に見えることは何もせずにすぐに終了します。終了コードまたは stderr をチェックしていないため、親スクリプトは何か問題が発生したことを認識しません。これにより、デバッグがとても楽しくなります。実際にはcheck_callではなくを使用する必要がありcallます。)

いずれにせよ、自分のスクリプトで同じディレクトリにある別のスクリプトを見つけたい場合は、明示的に指定する必要があります。


したがって、これらの問題の両方を修正するには:

import os
import sys
mypath = os.path.abspath(__file__)
mydir = os.path.dirname(mypath)
start = os.path.join(mydir, "start.py")
subprocess.call([sys.executable, start])

最後に 1 つ: あなたのコメントから、あなたが実際にstart.py配布可能なパッケージにバンドルされているかどうかさえわかりません。それが動作するあなたのマシンでは、明らかにC:\Python27\start.py. しかし、あなたがテストしているマシンでは…どこかに存在しますか? そうでない場合は、明らかに実行できません。

のようなツールは、py2exe依存関係を自動的に見つけることができますimportが、 を介して別のインタープリター インスタンスでスクリプトを実行しているだけの場合は、そのスクリプトを含めるsubprocessように (に) 指示する必要があります。setup.py

于 2013-09-12T07:09:49.233 に答える