2016-08-16 5 views
0

私はこのトピックのいくつかの検索を行い、いくつかの以前のスレッドを見つけましたが、私はまだPythonの初心者です。windowsスケジューラを通して実行するときのPython ImportError

私はいくつかの長い文字列変数がサブディレクトリのさまざまな.pyファイルに格納されているPythonスクリプトを持っています。スクリプトを実行すると、そのサブディレクトリから.pyファイルをインポートしています。サブディレクトリには__init__.pyファイルがあります。私がこの設定を使用している唯一の理由は、それらの他のファイルに格納している長い文字列変数が、SQL文字列であり、それぞれ50〜100行に及ぶ可能性があるため、コードを読みにくくすることです。

PyCharmを通じてこのスクリプトを実行すると、すべてが完全に機能します。

ただし、Windowsスケジューラまたはバッチファイルでスクリプトを実行すると、サブディレクトリにあるすべての.pyファイルに対してImportErrorが発生します。この問題は、pythonスクリプトがWindowsスケジューラを介して実行されているときに、それらの.pyファイルを探す場所を知らないということとはまったく関係がありません。しかし、私はそれを修正する方法がわかりません。

スケジューラタスクのアクションはスクリプト

D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py 

だから、完全なアクションがどのように見えるとして、引数にPythonのexeファイル

D:\Python35\python.exe 

を実行することです:

D:\Python35\python.exe "D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py" 

長い文字列変数.pyファイルを格納するサブディレクトリは、

です。
D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0\ 

輸入は、次のようになります。

from dcitechnicalperformance.dcitechnicalperformance0.dciquer import nzsqldciwk 

誰もがこの問題に対処する方法を知っていますか?どんな助けでも大歓迎です。

答えて

0

良い午後、すべての

まず、私はモジュール上の長いSQLのquerysを格納することがあるどれだけの意味がわからない、私はいかなる手段によっても専門家ではないんだけど、JSONファイルのようなもの(または地獄、それらもSQL内のテーブルに格納する)良いアプローチのように思えます。あなたの問題について

私はそれがタスクを起動するカレントディレクトリ上に存在すると思いますが、私が説明しましょう:

PyCharmで
  • あなたはそれがファイルの場所からを起動するコードを実行し、それで、モジュールでディレクトリを見つけることができます。
  • スケジュールされたタスクでは、別のディレクトリで起動している可能性があります。ディレクトリが存在しないため、モジュールを見つけることができません。

あなたが非難もっともらしい解決策に固執することを決定した場合、プロジェクトの場所をブラウズの.batファイルを作成するために、次のようになります。

@ECHO OFF 
D: 
cd D:\python\tableaudatasourcebuilds\dcitechnicalperformance\ 
D:\Python35\python.exe dcitechnicalperformance0.py 

そして、それが動作するはずですが。

+0

残念ながら、この解決策は私のためには機能しませんでした。私はまだインポートエラーを受け取りました。私が解決した方法は、クエリをテキストとして保存し、テキストファイルをコードとして実行することです。おそらく最適な解決策ではないかもしれませんが、少なくともそれは機能します。 – SeaChange

関連する問題