2013-01-31 153 views
15

我下載了Python for .NET
裏面的zip是clr.pyd,nPython.exe,Python.Runtime.dll和2調試數據庫文件。
我把clr.pyd和Python.Runtime.dll放到我的python dll中dir C:\ Python27 \ DLLs認爲這是安裝所需要的。然後我打開了Python的GUI和類型進口CLR和我得到:如何在Windows上安裝Python for .NET

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    import clr 
SystemError: dynamic module not initialized properly 

新的Python但不是.NET和要使用的CPython的,而不是IronPython的。在安裝中我缺少什麼?自述文件爲Python for .NET說有一個Windows軟件包的安裝,但我發現的只是zip文件。

+0

「python.net」你不是指鐵thon?? –

+5

我不知道。 IronPython是MS自己製作的可執行文件。我想使用「正常」的Python,但是.NET庫暴露給它。這是我的理解Python.NET做到這一點。 – user441521

+1

你的理解是正確的。我喜歡將它解釋爲IronPython是一個包含Python的.Net環境。 Python .Net允許Python包含.Net – bc3tech

回答

5

安裝Python for .NET的正確方法是將所有文件從.zip複製到包含.py文件的目錄中。

然後,如果你執行

python yourfilename.py 

你會發現,你的 「進口CLR」 語句的工作。我已經測試了這個使用python 2.7 x86和pythonnet-2.0-Beta0-clr4.0_140_py27_UCS2_x86.zip

我能夠通過只複製clr.pyd文件到我的工作目錄來複制你的錯誤。

注意,我無法讓在Python 3.3的x86或Python 3.3 x64的

+0

我相信這個問題與複製任何其他文件無關。 – Jonno

+2

這是可行的,因爲sys.path包括當前目錄,但是每個.py腳本攜帶pythonnet並不是非常靈活和維護的噩夢。 – denfromufa

2

這個工作,我不知道爲什麼,但是我能得到它的工作的唯一辦法就是那3個文件複製到C:\ Python27 \目錄直接。

13

在Python加載CLR正確的方法是這樣的:

  1. 確保沒有舊的東西是從Python.NET在Python安裝文件夾離開(例如C:\ Python27)。在我的情況下,我在其中一個文件夾中存在傳統clr.pyd。請注意,某些舊版本的pip並未刪除Python.NET的所有部分。
  2. 附加與Python.NET文件(clr.pydPython.Runtime.dll)的目錄sys.path

現在你可以加載CLR最靈活的方式,甚至沒有安裝Python的目錄!

您可以從源代碼編譯在GitHub上:

pip install git+https://github.com/pythonnet/pythonnet 

或使用Windows輪/安裝從克里斯托夫Gohlke:

http://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonnet

的PyPI包可供安裝使用從PIP:

https://pypi.python.org/pypi/pythonnet

更多的安裝選項,比如搬運工,WinPython,暢達,的NuGet,巧克力這裏列出:

https://github.com/pythonnet/pythonnet/wiki/Installation

+1

這對我的兒子有很大的幫助,所以我欠了很多 –

3

我居然拿了事項在我自己的手在這裏創造了Python.Net的巧克力包裝。 安裝,只需運行在命令行

cinst pythonnet

。也許這會幫助用戶解決問題,讓它運行。

2

如果您打算使用py2exe或pyinstall進行凍結,請務必安裝dev版本。與py2exe,pyinstaller以及其他冷凍機一起打包時,2.0.0版本出現問題。但是2.1.0.dev1運行良好。所以......

pip install --pre pythonnet

而且你必須在pythone.runtime.dll添加到包(參見文檔您的首選捆綁)。 在使用bundle_files時,py2exe如何加載dll也存在問題:1(單個exe)。