UiPathでPython を活用する

# 概要
UiPath から Python を実行できると、人工知能、機械学習などのライブラリを利用でき、これらの作業の自動化ができるなど、使用用途が広がります。そこで、UiPath からPythonを呼び出す方法を探ってみたいと思います。方法大きく分けて2つあり、専用のパッケージを使用する方法もありますが、Pythonディストリビューションに癖があったりするので、その辺も見ていきます。

環境

* UiPath Studio 2019.7.0
* Python
 - (方法1の場合) 方法1-1は環境は限定しない。方法1-2はPython 3.7 Python Software Foundation Distribution  (Python.org からの[ダウンロード](https://www.python.org/downloads/)、および[Windows Store](https://www.microsoft.com/ja-jp/p/python-37/9nj46sx7x90p))を利用。
 - (方法2の場合) Python 2.7, 3.3-3.6 ([Anaconda Distribution 32-bit](https://repo.continuum.io/archive/)) を利用。
 
実行するPythonコード

```Python:Hello.py
key = input('Hello World!')
```



# 方法1. アプリケーションのプロセスを開始で実行

まず一番単純で何も前提条件がいらない方法です。この方法では、UiPath環境の事前準備も不要で、Pythonディストリビューションにかかわらずpython.exeを実行可能です。

### 1-1.「プロセスを開始」
アクティビティの中の「システム/アプリケーション/**プロセスを開始**」をシーケンスのウィンドウにドラッグ＆ドロップします。
![uipath-application01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/4e3cd464-42bd-fbdb-8de4-5e434b4b2637.png)

すると、以下のようなフローチャートが出来上がります。
![uipath-application02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f2c96d2f-6c86-1d88-b5f1-c7587fe314e4.png)

このプロパティの中で今回利用するのは「**ファイル名**」と「**引数**」です。
![uipath-application03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b5d2defb-86b0-2d3e-c8ff-858597ed97f7.png)

### 1-2-1. .pyの関連付けを利用して実行
.pyとの関連付けがされるPythonパッケージであれば、この方法をとることができます。.pyファイルを直接「**ファイル名**」に指定 (ダブルクオートで囲む)します。
![uipath-application04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/8e35143a-5845-1624-f09d-44454884d11c.png)

このシーケンスを実行すると、以下の通り、「Hello World!」が表示されて入力待ちになります。
![uipath-application05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/27410350-b5c0-7925-2523-1fe0fb1deb20.png)

この方法では、UiPathはPythonスクリプトの完了を待たずに完了します。



### 1-2-2. python.exeのパスと引数を指定して実行
.pyとの関連付けがされないPythonパッケージでも、この方法で実行できます。Pythonパッケージが複数インストールされていて、python.exeを明示的に指定したい場合にも便利です。「**ファイル名**」にはpython.exeのパスを、「**引数**」には.pyファイルのパスを指定します。
![uipath-application06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/9c3cd96a-1cc8-e552-d6ba-50b2e1d6c5dd.png)
引数のほうのパスもダブルクオートで囲うのを忘れずに。

python.exeの場所は以下になります。

* Anaconda 版 (All User インストールの場合): `C:\ProgramData\Anaconda3\python.exe`
* Python Software Foundation Pyhon.org 版: `C:\Users\(User名)\AppData\Local\Programs\Python\Python37-32\python.exe`
* Python Software Foundation Windows Store 版: `C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1264.0_x64__qbz5n2kfra8p0\python.exe`

また、Python Software Foundation Distribution を入れると、`c:\windouws\py.exe`にPython Launcherもインストールされるため、こちらのパスを指定してもOKです。

この方法では、UiPathはPythonスクリプトの完了を待たずに完了します。

# 方法2. 専用パッケージを利用
UiPathにはUiPath.Python.Activities という専用のパッケージが用意されています。UiPath公式ではこれを使用することになっています。セットアップ後、追加のアクティビティが使えるようになります。

ちなみに、この方法は私も調べていていろいろハマったのですが、**使えるバージョンに制限があるようです**。

>**制限事項**

>* 32 bit版のみ動作可能。64 bit版は動作しない。
>* Pythonバージョンは2.7, 3.3-3.6で動作。3.7は動作しないようである。
>* Distributionで制限があるかどうかは不明。情報求む。(Distributionによってpython.exeのインストール場所が結構違うので)


### 2-1. UiPath.Python.Activitiesパッケージのインストール
まず、UiPath Studioの「**パッケージの管理**」をクリックして、パッケージをインストールします。これをクリックして、右側の「**インストール**」ボタンをクリックします。
![uipath-package01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/4ec16f67-2a2c-611e-c825-aa3d43b496c0.png)

左ナビで「**オフィシャル**」を選択して、上の検索ボックスで「Python」と入力して検索すると、UiPath.Python.Activitiesパッケージが表示されます。右側に表示される「**インストール**」ボタンをクリックして「**保存**」ボタンをクリックします。
![uipath-package02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/2da4e69a-7b61-092d-1560-6fafb94ca754.png)

ライセンスへの同意を求められるので、同意事項を確認の上、「**同意する**」をクリックします。
![uipath-package03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/13541035-475a-d85f-aaf3-a8a52cc7a40a.png)

すると、アクティビティに「アプリの起動元/**Python**」が追加されます。
![uipath-package04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f12ccf1b-3e74-7365-8e8f-db834af71f25.png)

これでパッケージの準備が整いました。


### 2-2. 「Python スコープ」の設定
最初にやるべきことは、[Python スコープ](https://docs.uipath.com/activities/lang-ja/docs/python-scope)の設定です。このコンテナの中では、Python環境のパスを設定し、環境の初期化、Pythonオブジェクトの保持を行います。スコープが終了すると、ロードされたオブジェクトが削除される、というものです。

アクティビティからPythonスコープをドラッグ＆ドロップすると、以下のようなフローチャートが作成されます。
![uipath-package05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/00f8e3e7-299a-c436-f3c6-a3cabb7a958f.png)

右側のプロパティからPython環境の設定を行います。
![uipath-package06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/a6011f8c-cf21-ac41-9811-ef075a2da78b.png)

バージョンはAutoになっていますが、エラーが出る場合、手で指定してみてください。バージョン3.5, 3.6であればAutoでもいけるようです。パスには、python.exeが格納されているディレクトリをダブルクオートで囲んで記載します。(Anaconda Distributionなら`C:\ProgramData\Anaconda3`など)


### 2-3. 「Python スクリプトを実行」
hello.pyファイルを実行するには、これをPythonスクリプトパスに指定します。
![uipath-package07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/fe833a8b-5a75-fdc4-dbad-35b679cbb9a6.png)

プロパティでいうと以下のファイルの場所です。
![uipath-package08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/3936d713-2773-a061-7ee8-bd3d3c27e4e1.png)

これで実行すれば同様の結果が得られる、はずですが、なぜか私の環境ではPythonコードは実行されず、デバッグでステップインしてみると以下のようなエラーが出てしまいました。。。
![uipath-python-error.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/bc310cf7-eb05-4a6c-4c4d-bb04fa8b5a7c.png)