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"])
前もって感謝します
ここには少なくとも2つの問題があります。
まず、実行可能ファイルとしてpython
だけを使用することはできません。
あなたのシステムでは、%PATH%
にpython
があり、それはright Pythonバージョンで、すべてのモジュールがありますに依存するなど。ただし、すべてのユーザーがこれに依存することはできません。可能であれば、そもそもpy2exe
を気にする必要はありません。
そして明らかに、テストしている他のマシンでは、%PATH%
にpython
という名前の名前がまったくないため、WindowsError2が発生します。
とにかく、スクリプトが使用している同じ Python)で実行する必要があります。
一方、start.py
が現在の作業ディレクトリにあると期待する理由はありません。それは(うまくいけば)親スクリプトと同じディレクトリにありますが、おそらくそれは作業ディレクトリではありません。通常、Windowsプログラムは、C:\、WINNTディレクトリ、またはユーザーのホームディレクトリなどで起動し、バージョンごとに異なります。
もちろん、開発中は、通常、コマンドPromptを使用し、スクリプトを実行するときは常にスクリプトのディレクトリを作業ディレクトリとして使用するか、IDE)を使用して効果的に同等の処理を行います。したがって、たまたま機能しますが、.exeから実行する場合は、それを当てにすることはできません。
(これはデバッグがさらに楽しくなります。サブプロセスは正常に開始され、何も表示されずにすぐに終了します。終了コードまたはstderrをチェックしていないため、親スクリプトは何かがうまくいかなかったことを認識しません。これにより、デバッグが非常に楽しくなります。実際には、call
ではなくcheck_call
を使用する必要があります。)
とにかく、スクリプトがそれ自体と同じディレクトリにある別のスクリプトを見つけたい場合は、明示的に言う必要があります。
したがって、これらの問題の両方を修正するには、次のようにします。
import os
import sys
mypath = os.path.abspath(__file__)
mydir = os.path.dirname(my_path)
start = os.path.join(mydir, "start.py")
subprocess.call([sys.executable, start])
最後にもう1つ、コメントから、実際にstart.py
を配布可能なパッケージにバンドルしているのかどうかさえわかりません。それが機能するあなたのマシンでは、それは明らかにC:\Python27\start.py
にあります。しかし、テストしているマシンでは…どこかに存在しますか?そうでなければ、明らかにそれを実行することはできません。
py2exe
のようなツールは、import
の依存関係を自動的に見つけることができますが、subprocess
を介して別のインタープリターインスタンスでスクリプトを実行している場合は、次のように指示する必要があります。 (setup.py
に)そのスクリプトを含めます。