- 概要
- 暗号化
- データベース
- Java
- Python
- Web API
既知の問題と制限事項
Python アクティビティ パッケージで Python スクリプトを実行する際の既知の問題 (スレッド、ファイル パス、型変換の問題など) に対する解決策です。
Python アクティビティ パッケージで Python スクリプトを実行する場合、次の動作について知っておく必要があります。それぞれに回避策が含まれています。
スクリプトはバックグラウンド スレッドで実行されます
症状: スクリプトが次のエラーで失敗します。通常は、 xlwings や別の Excel ブリッジや GUI ブリッジなどのシグナル ハンドラーをインストールするライブラリをインポート中に発生します。
ValueError: set_wakeup_fd only works in main thread of the main interpreter
原因:Python スコープ内のコードは、プロセスのメイン スレッドではなくワーカー スレッドで実行されるため、メイン スレッドを必要とする Python コードは失敗します。
アクション: 次のいずれかの方法を使用します。
- Excel ファイルの読み取りと書き込みに
xlwingsではなく、メイン スレッドを必要としないライブラリ (openpyxlやpandasなど) を優先します。 - メイン スレッド依存のコードを別の Python プロセスで実行します。このプロセスは
subprocessで起動され、実際の Python 実行可能ファイル (shutil.which("python3")によって返されるものなど) を指しています。
このアクティビティ内では、 sys.executable は Python インタープリターではなくホスト プロセスを指しているため、 subprocessの有効なターゲットではありません。
相対ファイル パスが予期しないフォルダーに対して解決される
症状:open("data.csv") などの相対パスが、意図しない場所から読み取ったり書き込んだりし、ファイルが見つからないように見えます。
原因: [ 作業フォルダー ] プロパティが設定されていない場合、実行中のスクリプトの作業ディレクトリは、プロジェクト フォルダーではなく、アクティビティ独自のランタイム フォルダーになります。
アクション: 次のいずれかの方法を使用します。
- [Python スコープ] アクティビティの [作業フォルダー] プロパティを、スクリプトを実行するフォルダーに設定します。
- スクリプトの先頭で
os.chdir(...)を呼び出します。 - ファイル アクセスには絶対パスを使用します。
[Python のオブジェクトを取得] では、すべての Python 型を変換することはできません
症状: [ Python のオブジェクトを取得] アクティビティが失敗し、次のエラーが表示されます。
Get Python Object: Error converting Python object
原因: このアクティビティは、Python の戻り値を .NET 型に変換します。複雑なオブジェクトやネイティブの Python オブジェクト ( dict、 list、pandas DataFrameなど) は、常に変換できるとは限りません。
アクション: Python 関数から文字列を返し、ワークフローに変換します。
- Python で、
json.dumps(...)を使用して値を JSON にシリアル化します。pandas の場合はdf.to_json(orient="records")を使用しますDataFrame。 - [ Python のオブジェクトを取得 ] を
Stringとして使用して値を取得します。 - ワークフローで逆シリアル化します。