ここには少なくとも 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