CPythonから.NETにアクセスできるPythonパッケージがないかを探したところ、pythonnet
(Python for .NET)がありました。
pythonnet/pythonnet - GitHub
ただ、インストールで少々悩んだため、メモを残しておきます。
環境
流れ
pythonnetのインストールエラー
# 環境構築 D:\Sandbox>mkdir pythonnet_install D:\Sandbox>cd pythonnet_install D:\Sandbox\pythonnet_install>virtualenv -p c:\python35-32\python.exe env D:\Sandbox\pythonnet_install>env\Scripts\activate # PyPIからインストール => エラー (env) D:\Sandbox\pythonnet_install>pip install pythonnet ... C:\Users\<user>\AppData\Local\Temp\pip-build-90jhpr0y\pythonnet\packages\UnmanagedExports.1.2.6\tools\RGiesecke.DllExport.targets(42,5): error MSB4062: "RGiesecke.DllExport.MSBuild.DllExportAppDomainIsolatedTask" タスクをアセンブリ C:\Users\<user>\AppData\Local\Temp\pip-build-90jhpr0y\pythonnet\packages\UnmanagedExports.1.2.6\tools\RGiesecke.DllExport.MSBuild.dll から読み込めませんでした。ファイルまたはアセンブリ'Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 <UsingTask> 宣言が正しいこと、アセンブリとその依存関係が使用可能であること、および Microsoft.Build.Framework.ITask を実装するパブリック クラスがタスクに含まれていることを確認してください。 [C:\Users\<user>\AppData\Local\Temp\pip-build-90jhpr0y\pythonnet\src\clrmodule\clrmodule.csproj] ... Failed building wheel for pythonnet # GitHubからインストール (env) D:\Sandbox\pythonnet_install>pip install git+https://github.com/pythonnet/pythonnet.git ... (同じエラー) ... Failed building wheel for pythonnet
仕方ないのでUnofficial Windows Binaries for Python Extension Packages
から入れようと考えて眺めていたところ、ウェブサイト中に
Use pip version 8 or newer to install the downloaded .whl files.
という記述がありました。
手元のpipのバージョンを確認すると、
(env) D:\Sandbox\pythonnet_install>pip list You are using pip version 6.1.1, however version 8.1.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. pip (6.1.1) setuptools (15.0)
と古かったことから、アップグレードすることにしました。
pipのアップグレード(失敗編)
pip 6.1.1の警告メッセージは罠です。
表示通りpip install --upgrade pip
すると、
# メッセージ通りにやるとアップグレードに失敗する (env) D:\Sandbox\pythonnet_install>pip install --upgrade pip ... PermissionError: [WinError 5] アクセスが拒否されました。: 'd:\\sandbox\\pythonnet_install\\env\\scripts\\pip.exe' # pipはアンインストールされた状態 (env) D:\Sandbox\pythonnet_install>pip list ImportError: No module named 'pip'
と、pipのアップグレードに失敗し、pip自体もアンインストールされた状態となりました。
そのため、easy_install
を使ってpipをインストールするはめになりました。
# easy_installで入れる (env) D:\Sandbox\pythonnet_install>easy_install pip ... Finished processing dependencies for pip # 復活 (env) D:\Sandbox\pythonnet_install>pip list pip (8.1.1) setuptools (15.0)
pipのアップグレード(成功編)
pipのアップグレードは、python -m pip install --upgrade pip
とするのが正しいようです。
Windowsでpip install --ugrade pipが失敗する - Qiita
(env) D:\Sandbox\pythonnet_install>python -m pip install --upgrade pip You are using pip version 6.1.1, however version 8.1.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Collecting pip Using cached pip-8.1.1-py2.py3-none-any.whl Installing collected packages: pip Found existing installation: pip 6.1.1 Uninstalling pip-6.1.1: Successfully uninstalled pip-6.1.1 Successfully installed pip-8.1.1 (env) D:\Sandbox\pythonnet_install>pip list pip (8.1.1) setuptools (15.0)
pip 8.1.1でpythonnetをインストール
再度、pipでpythonnetをインストールすると、
(env) D:\Sandbox\pythonnet_install>pip install pythonnet Collecting pythonnet Using cached pythonnet-2.1.0-cp35-cp35m-win32.whl Installing collected packages: pythonnet Successfully installed pythonnet-2.1.0
エラーが出ることなく、無事に終わりました。