如何在Windows系统上安装Python for .NET

17

我下载了Python for .NET
在压缩包里有clr.pydnPython.exePython.Runtime.dll和两个调试数据库文件。
我把clr.pyd和Python.Runtime.dll放到了我的Python DLLs目录C:\Python27\DLLs中,认为这就是安装所需的全部内容。然后我打开Python GUI并输入import clr,结果显示:

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 文件。


"python.net" 您是不是指的是 IronPython? - Dude Bro
6
我不需要使用IronPython,因为它是微软制作的独立可执行文件。我想要使用“普通”的Python,但需要将.NET库引入其中。据我了解,Python.NET可以实现这一点。 - user441521
2
你的理解是正确的。我喜欢将其解释为IronPython是一个包含Python的.Net环境。Python .Net允许Python包含.Net。 - bc3tech
我有同样的问题。CLR 2.0版本对我来说很好用,但4.0版本不行。 - Jonno
@bc3tech...并允许.NET嵌入CPython(不仅限于IronPython)。 - denfromufa
6个回答

16

在Python中正确加载CLR的方法如下:

  1. 确保Python安装文件夹(例如C:\ Python27)中没有Python.NET中旧的残留物。在我的情况下,我在其中一个文件夹中遗留了传统的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

或者可以使用Christoph Gohlke提供的Windows wheels / installers:

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

可以通过pip安装PyPI包:

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

更多安装选项,如docker、WinPython、conda、nuget和choco等,请参阅以下链接:

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


5
安装Python for .NET的正确方式是将.zip文件中所有文件复制到包含.py文件的目录中。
然后,如果您执行以下操作:
python yourfilename.py

您应该发现"import 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中使其工作。


我相信这个问题与复制其他文件无关。 - Jonno
2
这个可以工作是因为sys.path包括当前目录,但是每个.py脚本都携带pythonnet并不是非常灵活和难以维护的。 - denfromufa

4

我实际上亲自动手创建了一个Python.Net的Chocolatey软件包。

要安装,只需在命令行中运行

cinst pythonnet

也许这可以帮助那些无法正常运行此程序的用户。


2

我还不知道原因,但唯一让它起作用的方法是将这3个文件直接复制到C:\Python27\目录中。


2
如果您计划使用py2exe或pyinstall进行冻结,请确保安装开发版本。2.0.0版本在使用py2exe、pyinstaller和其他免费冷库打包时存在问题。但是2.1.0.dev1版本可以很好地工作。所以... pip install --pre pythonnet
您还需要将pythone.runtime.dll添加到捆绑包中(请参阅首选捆绑器的文档)。 当使用bundle_files: 1(单个exe)时,py2exe加载dll的方式也存在问题。

0
我成功地通过下载最新版本的Python,并使用pip将模块导入其中,然后将python311.dll添加到PythonNet的nuget版本中,并设置runtime.pythonsdll = dll文件的路径,使得Python Net能够正常工作。

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接