2013-01-31 405 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)。