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
エラーが出ることなく、無事に終わりました。