【问题标题】:How to install Python for .NET on Windows如何在 Windows 上安装 Python for .NET
【发布时间】:2013-01-31 19:33:28
【问题描述】:

我下载了Python for .NET
zip 中包含clr.pydnPython.exePython.Runtime.dll 和 2 个调试数据库文件。
我将 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 文件。

【问题讨论】:

  • "python.net" 你不是说ironpython吗?
  • 我没有。 IronPython 是 MS 自己制作的可执行文件。我想使用“普通”Python,但要向它公开 .NET 库。我的理解是 Python.NET 会这样做。
  • 你的理解是正确的。我喜欢将其解释为 IronPython 是一个包含 Python 的 .Net 环境。 Python .Net 允许 Python 包含 .Net
  • 有同样的问题。 CLR 2.0 版本对我来说很好,但 4.0 版本不行。
  • @bc3tech ... 并允许 .NET 嵌入 CPython(不限于 IronPython)

标签: c# python .net python.net pythonnet


【解决方案1】:

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

cinst pythonnet

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

【讨论】:

    【解决方案2】:

    在 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

    可以从 pip 安装 PyPI 包:

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

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

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

    【讨论】:

      【解决方案3】:

      为 .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 中完成这项工作

      【讨论】:

      • 我认为该问题与复制任何其他文件无关。
      • 这是可行的,因为 sys.path 包含当前目录,但是每个 .py 脚本都携带 pythonnet 不是很灵活,维护噩梦。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        pip install --pre pythonnet

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

        【讨论】:

          猜你喜欢
          • 2019-03-22
          • 1970-01-01
          • 2015-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-18
          相关资源
          最近更新 更多