问题标签 [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 投票
0 回答
585 浏览

python - 避免在具有嵌入式 Python + C 扩展的应用程序中重复 msvcr90.dll?

我正在分发一个嵌入 Python 2.7 的 Windows 应用程序(技术:包括带有 DLL 和 Lib 文件夹的 python27.dll + 'Python27' 目录,以及我的 .exe)。我还包括一个使用 C 扩展(基本上是 DLL 的 .pyd 文件)的自定义 Python 包。

我知道我需要有版本 9.0.21022.8 的 msvcr90.dll 和相关的清单。我可以将 msvcr90.dll + manifest 放在我的 .exe 文件旁边,我可以正常工作,没有问题。但是为了使用我的自定义 Python 包,我发现我需要在与包的 .pyd 文件相同的级别包含 msvcr90.dll + manifest(如果它们不存在,则应用程序在 PyImport_ImportModule 期间崩溃)。我不明白为什么 .pyds 无法“看到”位于树上方的 msvcr90.dll。

我知道我可以(可能)通过在目标机器上运行 MS Visual C Redistributable 包来绕过这个......这实际上安装了 MSVCR DLL + 清单,因此它在系统范围内可用。但是我不想要求我的用户运行它,也不想尝试将其安装在正确的位置并自己处理版本控制等。

0 投票
1 回答
1042 浏览

python - 为什么从 C 应用程序导入 Python 脚本时,我需要显式地将 os.getcwd() 添加到 sys.path?

我正在阅读有关使用 C/C++ 扩展 Python的 Python 文档,我发现了一个非常有趣的场景。test_script.py考虑一下我的工作目录中命名了以下简单的 Python 脚本:

在同一目录中,我有一个名为 的文件another_test_script.py,其中包含:

哪个工作正常,当称为python ./another_test_script.py. 现在,我试图从与 Python 库链接的 C 环境中调用所述函数,如下所示:

如上述 C 程序中的注释所述,注释掉包含的行PyRun_SimpleString("sys.path.insert(0, os.getcwd())")会导致调用PyImport_Import失败(返回NULL)。此外,呼叫PyRun_SimpleString("import test_script")的行为方式似乎相同。

为什么我需要手动将当前工作目录添加到 Python 的sys.path字符串列表中,而只是从同一工作目录中的另一个 Python 脚本导入它?此外,为什么 Python 不首先搜索当前工作目录(os.getcwd()返回正确的路径)?如果我想从与我的 C 应用程序捆绑的脚本中导入函数,这是一个合适的解决方案吗?

0 投票
1 回答
976 浏览

python - 嵌入 Python 3 - 没有内置函数?

在大量脱发后,我正在寻求帮助。

我将 Python 3.3 嵌入到一个简单的应用程序中。一个不寻常的方面是 Python 不在路径上,但似乎一切正常。但是由于某种原因,什么都不能执行。

下面是一个显示错误的小示例程序:

编辑:我知道引用计数是可怕的——这只是一个简单的例子。

我尝试了多种方式来导入和定义内置函数,包括如下所示的各种尝试:

它们都不起作用-每个错误都相同。

我究竟做错了什么?它与路径有关吗?关于我做错的内置函数?

0 投票
3 回答
10144 浏览

python - 为什么 PyImport_Import 无法从当前目录加载模块?

我正在尝试运行嵌入示例,我无法从当前工作目录加载模块,除非我明确将其添加到sys.path然后它可以工作:

Python 不应该在当前目录中查找模块吗?

Edit1:尝试只导入模块:

它仍然失败并出现以下错误:

Edit2:来自sys.path 文档

如果脚本目录不可用(例如,如果以交互方式调用解释器或从标准输入读取脚本),则 path[0]是空字符串,它指示 Python 首先搜索当前目录中的模块

不确定not available是什么意思,但如果我打印sys.path[0]它不是空的:

0 投票
2 回答
1042 浏览

c++ - C++ 中的 Python 代码

我想在我的 C++ 框架中使用一些 Python 代码来绘制一些统计数据。我已经找到了以下帖子(关于如何在 c++ 中嵌入 python),但是按照说明并没有成功:Embed python code in C++ (Windows + minGW + Python 2.7.2 + Eclipse)

很抱歉,但我在制作文件或附加静态或动态库方面没有太多经验......

我必须遵循系统:Windows 7 + 64 Bit + Eclipse IDE for C/C++ Developers,版本:Juno Service Release 1 + mingw + python32

在路径和符号下:+添加python32的包含目录+添加库“python32”应该对应于libpython32.a+添加库路径

编译和链接似乎可以工作,但是当我尝试启动 exe 时,我收到以下消息:

“程序无法启动,因为您的计算机中缺少 python32.dll。请尝试重新安装程序以解决此问题。”

我无法理解此消息,因为我尝试将静态库 (libpython32.a) 添加到源中。你能在正确的方向轻轻推动我吗?

非常感谢您的帮助!

编辑:添加了 makefile 和 objects.mk

制作文件################################################ ############################### 自动生成的文件。不要编辑!################################################# ##############################

对象.MK

0 投票
0 回答
427 浏览

c++ - Tkinter 创建的 C++ 对话框中的嵌入式 Python

我已成功地将 python 嵌入到我的 c++ 应用程序中,该应用程序运行 mfc 并在 Visual Studio 2010 中编译。

我嵌入的 Python 版本是:2.7.3(默认,2012 年 4 月 10 日,23:31:26)[MSC v.1500 32 位(英特尔)]

我什至有几种方法可以让我在加载的脚本中调用主程序的选定函数。

当我尝试使用 Tkinter 使用我的 python 脚本创建对话框时,就会出现问题。在显示这些对话框时,当我再次尝试初始化 Tkinter 和 Python 解释器时,程序会崩溃。我找不到关于这个问题的太多信息:

http://mail.python.org/pipermail/python-list/2001-July/114106.html

和一个潜在的解决方案:http: //www.python.org/workshops/1995-12/papers/ahlstrom1.html

我是使用 mfc 和 python 编程的新手,所以任何正确方向的指针都将不胜感激。

谢谢

0 投票
0 回答
192 浏览

python - 将 Python 脚本嵌入 C 的最简单和最快的方法?

我一直在研究用于将我的 python 脚本嵌入到 C 中的 Python/C API。我想知道是否有一种简单(或更简单)的方法可以嵌入我的 python 脚本,而不必过多地参与 python/c API。我应该提到(因为我不确定这是否会成为问题)在我的 python 脚本中,我在我的 python 脚本中使用了许多其他模块(确切地说是 NumPy、SciPy、Matplotlib 和 Mayavi)。您能提供的任何帮助或建议将不胜感激。

0 投票
0 回答
466 浏览

visual-studio - 在 Visual C++ 中嵌入 Python 和运行时错误 R6034

所以在过去一周左右的时间里,我一直在尝试将 python 脚本嵌入到 C 中。我已经在连续的阶段完成了这项工作。对于我的第一次尝试,我会从 C 调用我的 python 脚本,并在我的 python 脚本中生成一个 2D 颜色图。这部分工作得很好。我的下一步是在我的 python 脚本中实现 3D 视觉效果(更多的是 3D 表面)。我通过使用 mayavi2 完成了这项工作。现在,当我在没有嵌入的情况下运行我的 python 脚本(即使用 IDLE)时,它可以正常工作,同时生成 2D 和 3D 视觉效果。但是,当我尝试将脚本嵌入 CI 时,会出现运行时错误:R6034。我应该说我正在使用python2.7(我下载了python(x,y))并且我正在使用Visual Studio 2012。
我想知道是否有人遇到过这个问题并且可能知道如何解决这个问题。

0 投票
1 回答
2838 浏览

python - 构建 Boost Python 调试

我绝对不是bjam专家,所以如果它真的很愚蠢,请原谅我的无知。

我正在尝试构建一个使用本教程debug的版本。boost::python

我已经Python 3.3.0在我的文件夹中建立了C:\Development\Python-3.3.0。构建是有效的.lib.dll.exe都存在于PCBuild文件夹中。我测试了解释器,它工作正常。

我正在使用以下命令行:

我的问题来自user-config.jam. 我尝试遵循本教程的规范,使用以下内容:

但是链接失败......由于某种原因,我希望它使用 3.3 似乎并没有发现,这是输出日志的一部分:

我尝试对user-config.jam. 起初,我没有逃脱\,令人惊讶的是,它检测到我想构建 3.3 但/LIBPATH错误(没有反斜杠):

如您所见,它正在寻找python33_d.lib,这是所需的,但/LIBPATH不包含\. 我也尝试用/which 再次返回尝试链接python26_d.lib

如果它有用,我卸载了任何以前安装的 Python 版本。

如何使我的jam文件正确地需要 3.3 版并提供正确的路径?

编辑:玩得更多,我在...之前删除了“空格” ;...只是这样做使它寻找正确的版本3.3,但它试图从相关libs文件夹链接发布版本...最坏的情况我不会不介意将库从复制PCBuildlibs

有趣的是,它最接近我想要实现的目标,但它输出

jam解析器似乎很弱......任何提示或提示都会有所帮助

编辑 2:试图简化问题,我将其更改user-config.jam为仅包含以下内容:

并使用以下命令行:

正如预期的那样,它找不到.lib

所以我决定将我的PCBuild文件夹克隆到libs其中,以便可以访问我构建的所有库......但这样做之后,无需更改.jam或命令行......它现在正在寻找 Python 2.6?!?

我越深入,我就越困惑......而且,一个失败了,另一个失败LNK1104LNK1181......

0 投票
1 回答
1293 浏览

c++ - PyRun_SimpleString 对于 def foo() 失败:

对于名称/路径中包含 unicode(widechar)的文件,我无法让 PyRun_SimpleFile 工作(FILE* 兼容性问题),因此这个问题!

因此,我决定自己打开 python 脚本,然后使用 PyRun_SimpleString 执行每一行。

此处显示的伪代码。

上面在下面的 def 语句中给出了错误(<- 如下所示)

Python版本是2.7

我想用它来显示如果/它失败的脚本的行号。许多其他人似乎使用 PyRun_SimpleString 取得了成功!

提前致谢。