问题标签 [python-embedding]

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 投票
1 回答
303 浏览

python - python c api的嵌套模块(包)?

如何使用 python c api 创建嵌套模块(包?)?

我希望客户端代码(python)能够执行以下操作:

而不是目前:

哪个 imo 看起来很丑陋并且使命名空间混乱。

是否有可能不必弄乱文件系统目录?

0 投票
1 回答
1405 浏览

c# - 在多线程 c# 应用程序中嵌入 Python

我的应用程序提供 python 插件系统。为了从 c# 调用 python。我已经编写了嵌入 python dll 的 C 包装器。你可以在这里找到要点C wrapper gist

然后我在 C# 中使用 P/Invoke 来调用 C dll。像这样:

如果我没有在 C# 创建的多个线程中执行上述代码,那也没关系。问题是如果我不使用线程,c# 中的主线程将被阻塞,而 python 代码需要很长时间才能执行。
这是我使用的 C# 多线程代码:

因此,我尝试在 C 包装器代码中添加多线程支持。正如你在那个要点中看到的那样。我试图添加:

但这对我不起作用。当我创建一些线程来调用该 dll 时,我会得到一个异常。

我还尝试了以下代码。仍然没有工作。

我想知道这是否是因为我输入Py_Initialize();了每个调用。当 thread2 执行时,Py_Initialize();将清除 thread1 可能需要的所有信息。我试图Py_Initialize()在我的应用程序启动时调用,所以它只会被调用一次。但是没有用。看起来这两个调用在 p/invoke 调用中是完全隔离的。

我在C和嵌入python方面很差,有人有相关经验吗?我的项目托管在https://github.com/qianlifeng/WinAlfred如果你们想看我上面描述的代码。

0 投票
0 回答
81 浏览

python - Extending Python Program that has already been compiled to .exe?

I'm making a network analysis tool using python 2.5 ( windows) , that captures network traffic using scapy and stores the capture data in *.pcap file . What i'm trying to achieve is to allow users to write their own functions that can analyze the network traffic . So what i did is that i created a interface class that would allow users to write the function.

Now the problem that i face is that after packaging the whole program as an exe , if i load a analyzer function with the above given structure and it has to import a module lets say " import nmap " how will that work and in case that module is installed on the system ?

So my question is that how do i accomplish this task , is there a better way ?

Thanks in advance .

0 投票
2 回答
2586 浏览

python - 是否可以在没有标准库的情况下嵌入 python?

是否可以在没有标准库的情况下嵌入 python?

我正在使用python 2.7.6 的 cmake 构建,并且运行了一个基本的嵌入式脚本,如下所示:

..但是当我运行它时,我得到:

如果我设置了正确的 $PYTHONHOME,它可以正常工作;但这不是我想要做的。我正在尝试将 python 的副本嵌入到没有标准库的独立应用程序中。

我很欣赏它的使用,但是对于这个特定的嵌入式环境,我想要更像 lua 的东西(但显然使用 python 语法),其中只有父应用程序公开的特定库可用。

这有一个额外的好处,即不关心分发(或构建)标准库及其所有交叉链接的动态库。

这可能吗?还是我不可避免地会偶然发现缺少标准库中的 sys.path、import、{}、[] 或类似语言的基本块?

如果有可能,你会怎么做?

0 投票
1 回答
2743 浏览

python - python嵌入:将列表从C传递给python函数

试图从 C++ 向 python 传递一个列表是行不通的。这是相关代码(使用其他相关帖子编写):

python 脚本 MySolver.py 是:

我正在按照其他地方的建议做所有事情。mysolve 函数只是没有被调用,C++ 程序只是继续前进,而不在 PyObject_CallObject 函数调用时报告任何错误。请注意,如果我将单个参数作为元组传递给我的求解函数,则代码可以正常工作。但是有一个列表它不起作用。任何想法,为什么它不起作用?

0 投票
0 回答
265 浏览

python - 嵌入 Python:如何在 Python 脚本中使用自定义类型?

我尝试从 C++ 代码中运行一些 Python 脚本。我达到了需要使用自定义类型的地步。我在 Python 文档中找到了关于创建自定义类型和不错的 SOQ的文章,解释了如何在 C++ 端创建自定义类型的实例。

但是,我不确定如何在 Python 中使用这种类型。在文档示例中,定义了一个“模块初始化程序”:

但是没有提示这个函数的目的是什么。如何(以及何时)调用此函数?

目前,我通过 PyEval_EvalCode() 运行我的脚本来运行整个脚本或 PyObject_Call() 来运行特定的功能。在这两种情况下如何使用我的类型?我需要先以某种方式导入它吗?

如果我将脚本作为模块导入:

我是否需要将我的类型添加到我以这种方式创建的每个模块中:

? 我认为,在 Py_Initialize() 之后创建的类型(因此,在单个解释器会话期间)应该对该会话期间导入的所有模块自动可见。我错了吗?

0 投票
1 回答
704 浏览

python - 在 tk 中嵌入动画 matplotlib

我对 python 还很陌生,而且是 tkinter 和 matplotlib 的真正初学者。我有以下代码,它本质上是我最终想要做的事情的测试平台。

我怎样才能将它嵌入到 tkinter 中。我已经搜索了几个小时并遇到了很多建议,但似乎没有一个适用于动态图。如果有人想查看该程序正在使用的数据,我使用以下代码创建了它。

当然可能只是我没有正确理解这一点

0 投票
3 回答
17012 浏览

python - 将 matplotlib 动画嵌入到 tkinter 帧中

对于一个项目,我正在研究一个简单的谐波运动模拟器(质量如何随时间振荡)。我已经正确生成了数据,并且已经在 tkinter 框架中生成了一个图表。目前它只显示一个静态图表,我的目标是随着时间的推移将图表显示为动画。

因此,为了方便起见,我使用以下代码创建了一个程序模型:

当取消注释时,此代码将在 tkinter 框架中显示我想要的动画plt.show()。我希望能够将该动画放在 tkinter 的框架内。

我也一直在 matplotlib 网站上查看所有动画示例,但没有一个有帮助。我还查看了在 tk 中嵌入动画 matplotlib并将 tkinter 按钮放置在 pyplot 图形中,而我想将图形放置在 tkinter 框架中。

所以为了澄清,我希望能够将plt.show()未注释时产生的动画放置在 tkinter 帧中,即root = tk().

0 投票
2 回答
9822 浏览

python - Python 嵌入:PyImport_Import 不是来自当前目录

使用下一行

pModule = PyImport_Import(pName);

仅从当前目录加载模块。

但是我想从其他地方加载什么?有没有一种巧妙的方法可以做到这一点?

PyRun_SimpleString("import sys\nsys.path.append('<dir>')"); 有效,但有点难看 - 我正在寻找更好的方法

谢谢!

0 投票
1 回答
665 浏览

python - 如何调用需要导入包的python文件?

我正在按照教程从python docs中的 C++ 程序调用 python 代码。

尝试调用multiply示例时一切正常。现在,如果我在导入库的 python 源代码中添加一行,可以说openpyxl

我收到来自 python 的错误

我以为如果我导入系统库,我不会有任何问题,但如果我尝试导入也会出错datetime

如果我从 python 控制台导入文件,我没有任何错误。该openpyxl库已安装在我的系统中。

所以我的问题是:如何导入需要导入包的python源代码?

编辑:好的,我忘了提一些事情,我对你们没有完全诚实,对不起。

尝试运行示例时遇到问题:我无法让 python 找到我的multiply.py文件,并且该行PyImport_Import总是返回null

我的解决方案是添加我知道我的 python 源的路径,方法是使用PySys_SetPath. 问题是我刚刚意识到这个函数不会追加一个新目录,它只是覆盖了PYTHONPATH. 所以现在 python 可以找到multiply.py,但绝对可以找到其他任何东西。

当然我已经删除了那行但现在我有另一个问题,如果文件只是在 C++ 编译程序的同一目录中,为什么 python 找不到我的源?

我意识到sys.path我的 python 控制台与我嵌入式 python 中显示的路径有点不同:第一个在列表的开头有一个空字符串''。我不是 python 专家,但是当我将该行添加到我的路径时,我可以导入,multiply.py所以看来这就是我无法导入相对于我的可执行文件的模块的原因是缺少这个空路径 -但还是不知道是什么意思-。

我必须感谢@paul-evans,他们给了我添加路径以查找我的文件的想法。