17

我为 .NET 下载了 Python
zip 中包含clr.pydnPython.exePython.Runtime.dll2 个调试数据库文件。
我将 clr.pyd 和 Python.Runtime.dll 放在我的 python DLL 目录 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 文件。

4

5 回答 5

15

在 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 轮子/安装程序:

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

PyPI 包可用于从 pip 安装:

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

docker、WinPython、conda、nuget、choco等更多安装选项在这里列出:

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

于 2014-08-02T04:44:49.577 回答
5

为 .NET 安装 Python 的正确方法是将.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 中完成这项工作

于 2013-03-20T13:21:37.497 回答
4

实际上,我在这里亲自处理并创建了一个 Python.Net Chocolatey 包。安装,只需运行

cinst pythonnet

在命令行。也许这将帮助遇到问题的用户运行它。

于 2014-10-13T17:44:31.290 回答
2

我还不知道为什么,但我可以让它工作的唯一方法是将这 3 个文件直接复制到 C:\Python27\ 目录中。

于 2014-03-13T15:15:57.477 回答
2

如果您打算使用 py2exe 或 pyinstall 冻结,请务必安装开发版本。与 py2exe、pyinstaller 和其他冷冻机打包时,2.0.0 版本有问题。但是 2.1.0.dev1 运行良好。所以...

pip install --pre pythonnet

而且您必须将 pythone.runtime.dll 添加到捆绑包中(请参阅文档以了解您首选的捆绑器)。在使用 bundle_files: 1(单个 exe)时,py2exe 加载 dll 的方式也存在问题。

于 2015-11-06T00:34:29.717 回答