ルートパスでのPythonファイルの問題

ルートパスでのPythonファイルの問題

よくテストされ動作するスクリプトがあります。スクリプトを実行しようとしたとき、/root/backup/script.pyまたは~/backup/script.pyスクリプトが実行され、スクリプト内で呼び出された他のファイルを見つけると、スクリプト内のファイルが見つからないというエラーが発生する問題が発生しました。他のコンピュータでも動作しますが、設定は同じで、python backup/script.pyホームディレクトリから実行するか、直接実行するとpython script.py機能します。取得したいファイルはscript.pyと同じディレクトリにあり、何が間違っているのかわかりません。スクリプトから呼び出された最初のファイルをインポートできますが、ファイルはインポートできません。

同じ方法で実行すると、他のシステムでも機能するため、これがある種のパス問題である可能性があると思います。

編集する

最初のコメントを読んだ後、クラッシュが発生したコードを投稿し、私が言ったように、最初のファイルも見つからないことに気づきました。コードにバグがあるので申し訳ありません。上記のように、他の場所では機能しますが、私が言及した2つの場所では機能しません。

storage = Storage("user_creds.dat")
credentials = storage.get()
if credentials is None or credentials.invalid:
        credentials = run_flow(flow_from_clientsecrets("client_secrets.json", OAUTH_SCOPE, ), storage, fla$

答え1

ファイルが見つかりませんエラーは、別のディレクトリでスクリプトを実行すると発生する可能性があります。

storage = Storage("user_creds.dat")

user_creds.datスクリプトが開始されたかどうかだけがわかります。~からたとえば、このディレクトリは

]$ pwd
~/backup
]$ python script.py

どこからでもスクリプトを起動できる必要がある場合は、これを指定できますuser_creds.dat。または、次のコマンドを使用してスクリプトを含むディレクトリをインポートできます。

os.path.dirname(os.path.realpath(__file__))

その後、次のようにして保存オブジェクトを取得できます。

os.path.join(os.path.dirname(os.path.realpath(__file__)), 'user_creds.dat')

関連情報