问题标签 [pythonnet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1015 浏览

c# - 为什么 .NET 的 Python 在构造函数期间持有全局解释器锁而不是方法调用?

我有几个用 C# 编写的类,我想从使用 Python for .NET 的 Python 编写的应用程序中使用它们。

之前使用 Python4Delphi 和 Python 的 C API 做过类似的事情,我知道为与 Python 交互的所有内容持有全局解释器锁 (GIL) 是多么重要,同时在长时间运行的操作期间释放它以便其他 Python 线程可以运行。

为了获得 GIL,Python for .NET 附带了方便的Py.GIL()实用程序,我编写NoGil它是为了让发布 GIL 变得同样容易。

我曾假设每当 Python 代码调用 C# 代码时,GIL 都会在调用期间保留。不过,似乎 GIL 在方法调用期间并未保留,而在构造函数调用期间则保留,如下面的示例所示。

这是 C# 类和我的NoGil带有一些日志记录的实用程序类。为简单起见,我没有完全实现 Disposable 模式。

它在 Python 中使用(在通过 pip 安装了 pythonnet 包之后),如下所示:

输出是

我尝试使用 Python 2.7 和 3.6(均为 64 位)、适用于 .NET 的 Python 的最新版本 2.3.0 以及 .NET 4.0 和 4.6.1 作为我的目标框架。

问题:

  1. 这是 Python for .NET 中的预期行为还是我应该提交错误?
  2. 如果可以预期,我可以假设在调用 .NET 代码时持有 GIL 的情况到底是什么?我没有找到任何关于此的文档。
  3. 或者我不应该对 GIL 做任何假设,并且总是在必要时获取它(即通过委托调用 Python 代码时)?那么我如何确保在长时间的非 Python 操作期间不会持有它?
0 投票
2 回答
1070 浏览

python - Pythonnet System.Object[,] 到 Pandas DataFrame 或 Numpy 数组

我正在使用 Pythonnet 调用一个 C# 函数,该函数返回一个 clr 对象(一个n x m矩阵)。在 python 中,类型是System.Object[,]。如何将此变量转换为 Pandas DataFrame 或更易于管理的东西?

谢谢你。

0 投票
0 回答
114 浏览

c# - C#调用Cpython的函数

这是我复制的代码,我想学习使用Python.Runtime,但是运行时抛出异常。

“DLL”python2.7m“无法加载:找不到指定的模块。(异常来自HRESULT:0X8007007E)。”

作为一个菜鸟的问题。谢谢你。

0 投票
1 回答
3614 浏览

c# - 在 Python 中为 .NET 实现 C# 接口

我得到了一个用 C# 编写的库,我正在尝试使用 Python for .NET 调用它。

我需要一个实例的主类有一个构造函数,如:

没有实现该IGDhuSettings接口的(公开的)类。当我创建一个 Python 类来实现它时,例如,

TypeError: interface takes exactly one argument如果我没有__new__方法或者我以正常方式定义一个方法,我会得到:

如果我尝试将接口实例化为一个类,我会得到相同的错误(没有或 >1 个参数),或者<whatever> does not implement IGDhuSettings如果我将它传递给单个参数。

查看Python for .NET 源代码

如果没有 CoClass(没有定义)或已经有一个实现它的类,我看不到一种在 Python 中实现 C# 接口的方法。

我在这里遗漏了一些细微差别,还是这是 Python for .NET 的限制?

GitHub上的讨论:https ://github.com/pythonnet/pythonnet/issues/674

0 投票
1 回答
4463 浏览

c# - Python for .NET:如何使用同一 DLL 的不同版本显式创建 C# 类的实例?

我有一个 .cs 文件,例如

到目前为止,我将它与 PythonNET 一起使用,例如

我现在的问题是我需要使用具有相同名称且未设置版本号的 dll,因此 PythonNET 不会将它们视为两个不同的 dll,而是将它们视为相同的。即使我使用带有 AddReference 的完整路径导入它们。

现在我想明确地使用它们,如此处所述:

Python for .NET:在多个版本中使用相同的 .NET 程序集

喜欢

我尝试了很多方法来创建SomeClass类似的实例

或者

或使用方法InitializeCreateInstance

或如以下链接中所述

最后一切都失败了,找不到东西,没有方法等等。

这样做的正确语法是什么?

0 投票
1 回答
1864 浏览

c# - Python for .NET:如何使用反射调用静态类的方法?

我想使用静态类的方法。

这是我的 C# 代码:

如果它是一个“普通”类,我可以SomeMethod使用

但是当我试图用静态类来做到这一点时

我怎么能解决这个问题?

0 投票
4 回答
12912 浏览

python - 使用 pythonnet 导入 DLL

我正在尝试在 python 中导入和使用 DLL。因此我使用pythonnet。

但是代码会产生以下错误:

DLL 的目标运行时为:v4.0.30319

有什么方法可以找出导入失败的原因以及如何修复它?

(如有必要,我还可以提供 DLL)

0 投票
0 回答
123 浏览

.net - PyQt5 剪贴板不适用于 clr

我构建了一个运行 PyQt5 gui 并从外部 dll 读取 C# 数据的程序,当我from clr import AddReferenceQApplication.clipboard 似乎不起作用时。

解决这个问题很容易,但我想知道这如何阻止剪贴板工作。

当我只导入 clr 时会出现这个问题

这个 clr 是从 pythonnet 项目安装的

任何信息都会很棒。

谢谢

0 投票
2 回答
558 浏览

python - Python for .NET:如何提供特殊类型的变量 (FTDI.FT_DEVICE_INFO_NODE[]) 作为方法参数

我想在 Python for .NET (pythonnet) 的帮助下使用 DLL。此 DLL 中的方法需要(指向?)变量作为参数。

我可以弄清楚如何调用方法并提供一个整数变量作为参数。

如果需要特殊类型,我不知道如何提供这样的参数变量(此处:FTD2XX_NET.FTDI.FT_DEVICE_INFO_NODE[])。

在使用不同的调用变体FTDI.GetDeviceList(其中一些在技术上相同)时,我得到不同类型的错误:

TypeError:没有方法匹配给定的参数

  • FTDI.GetDeviceList([ftdi.FT_DEVICE_INFO_NODE()][:])
  • FTDI.GetDeviceList(ftdi.FT_DEVICE_INFO_NODE)
  • FTDI.GetDeviceList(ftdi.FT_DEVICE_INFO_NODE())
  • FTDI.GetDeviceList(ftdi.FT_DEVICE_INFO_NODE(device_count))
  • FTDI.GetDeviceList([devicelist_])
  • FTDI.GetDeviceList(devicelist_)

类型错误:不可索引的对象

  • FTDI.GetDeviceList(ftdi.FT_DEVICE_INFO_NODE()[:])

类型错误:预期类型

  • FTDI.GetDeviceList(ftdi.FT_DEVICE_INFO_NODE[:])

  • FTDI.GetDeviceList(ftdi.FT_DEVICE_INFO_NODE[1])

  • FTDI.GetDeviceList(ftdi.FT_DEVICE_INFO_NODE[0])

这是代码摘要和结果:

在这里,我发现了一些 c# 代码,其中 FT_DEVICE_INFO_NODE[] 和 GetDeviceList 在方法中使用:

FTDI.FT_DEVICE_INFO_NODE[]作为参数提供给我有什么遗漏FTDI.GetDeviceList

FTDI 的 USB 驱动程序在此处下载:http ://www.ftdichip.com/Drivers/D2XX.htm,.Net包装器从此处下载:http: //www.ftdichip.com/Support/SoftwareExamples/CodeExamples /CSharp.htm

0 投票
2 回答
339 浏览

c# - 使用 C# dll 的 Pythonnet 运行时错误(数据库不兼容)

在此处输入图像描述我在 python 2.7.13(它使用其他 dll 文件和 .mdb 数据库文件)上使用 C# dll 使用 pythonnet 进行一些技术计算。这个 dll 文件没有很好的文档(只有命名空间、类和方法名)。好吧,大多数 PC 中的程序都可以正常工作,但在所有办公计算机中,它都会从 Dll 文件中引发运行时错误(我怀疑是与数据库的连接)。此 dll 文件被编译为面向 .NET 4.0(在办公计算机中安装了 .NET 4.7.1 或其他比 4.0 更新的版本)并且也正在使用 EntityFramework(程序面向 5.0,这是程序文件夹中的一个 dll 文件,但在办公电脑安装了EntityFramework 6.2工具)。Microsoft 数据库引擎 2010 也安装在这些计算机中。

在我测试过该程序的每一台其他计算机上,它都能完美运行。在办公室计算机中,我发现了一组程序适用的输入数据,但无论如何这是不正确的,因为它也应该适用于默认数据。

为了在办公计算机上进行测试,我使用 PyInstaller 编译了 python 代码(我重复一遍,编译版本在其他 PC 上工作正常)。

我正在使用 .NET Reflector 反编译 dll 文件和程序异常以查找错误。抛出异常的方法在下面的代码中。

提前致谢!