问题标签 [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 回答
562 浏览

python - pywin32 强制安装(避免 py*.dll 安装在 system32 目录中)

我在我的应用程序中将 python 作为嵌入式脚本环境。我为我的应用程序提供了 python 位(python26.dll、DLL 和 Lib 文件夹)。所有这些都是为了避免要求用户安装 python(你知道它在大公司中是如何进行的)。

除了 pywin32,一切都很好。它将 pythoncom26.dll 和 pywintypes26.dll 安装到system32目录。我想将这些 dll 保存在我的 Python 目录中。一种选择是将我的 Python 目录添加到 PATH 环境变量中。但是出于明显的原因想避免它(windows DLL 搜索路径优先级问题)。

有没有办法告诉 Windows(Windows API 也可以)查看我的目录以加载这些 pywin32 dll?据我了解,这些 dll 由 Windows COM 调用。

谢谢。

Edit1:请注意,python 部署在我的应用程序中。

0 投票
1 回答
16792 浏览

python - 使用 Python 的 C API 创建一个对象

假设我将对象布局定义为:

...和我的类型定义:

如何pyfoo在我的 C 扩展中创建某个位置的新实例?

0 投票
2 回答
1259 浏览

c++ - 试图将 python 嵌入到 Visual Studio 2010 C++ 文件中,并以代码 1 退出

我正在尝试将一些 python 代码嵌入到我正在使用 ms Visual Studio C++ 2010 开发的 C++ 应用程序中。但是当我运行该程序时,当我调用 Py_initialize() 时它以代码 0x01 退出。

我不知道如何找出问题所在。帮助文件说, Py_Initialize 不能返回错误值,它只会失败。但是,为什么失败了?

我正在使用自编译的 python27_d.dll,它是使用从 python.org 下载的源代码中的 msvs 项目文件创建的。

0 投票
3 回答
18617 浏览

c++ - 如何在 C++ 代码中捕获 python 标准输出

我有一个程序,在它运行期间有时需要调用 python 来执行一些任务。我需要一个调用 python 并捕获 python 标准输出并将其放入某个文件的函数。这是函数的声明

我的问题是捕获给定命令(pythonInput)的所有python输出。我没有使用 python API 的经验,我不知道什么是正确的技术来做到这一点。我尝试的第一件事是使用 Py_run_SimpleString 重定向 python 的 sdtout 和 stderr 这是我编写的代码的一些示例。

有一个更好的方法吗?此外,由于某种原因,PyRun_SimpleString 在得到一些数学表达式时什么也不做,例如 PyRun_SimpleString("5**3") 什么也不打印(python conlsul 打印结果:125)

也许这很重要,我正在使用 Visual Studio 2008。谢谢,Alex


我根据马克的建议做出的改变:

运行 main 后得到的输出:

这对我有好处,但只有一个问题,应该是

我不知道为什么,但是在运行此命令后: PythonPrinting("1+5"), PyString_AsString(output) 命令返回一个空字符串 (char*) 而不是 6... :( 有什么我可以做的吗?输出?

谢谢,亚历克斯

0 投票
1 回答
2615 浏览

c++ - 如何重定向 python 解释器输出并将其捕获到 C++ 程序中的字符串中?

我正在使用 python C++ API 从 C++ 程序运行 python 命令。我想将所有 python 输出捕获到一个字符串,我通过以下重定向进行管理,以捕获 pythons stdout 和 stderr 输出:

但我不知道该怎么做才能捕获 python 解释器输出....

0 投票
2 回答
3962 浏览

python - 在 C 中嵌入 python,未定义符号:PyExc_ImportError

我正在尝试为加载 python 模块的 Audacious Media Player 编写插件。python嵌入代码来自python-2.6源(嵌入/演示)。这使用命令行编译,

gcc -o demo demo.c -lpython2.6 -lm -L/usr/lib/python2.6/config

我添加-lpython2.6 -lm -L/usr/lib/python2.6/config到 CC 参数中。

它加载了一个导入pygtkgtk模块的 Python 脚本,这很好用。

但是在我编译插件(一个共享库)之后发生了以下错误(这不是gtk我发现的特定的,对于任何使用本机库的python模块都是一样的)

用于设置 python 解释器的 C 代码仅缺少PySys_SetArgv调用。我试图伪造它,但它导致了同样的错误!

0 投票
7 回答
10905 浏览

c++ - 是否可以在运行时修改 PYTHONPATH?

我有一个动态链接到 Python 解释器的 C++ 应用程序。我希望能够从特定目录导入 python 模块。我想为我的进程修改 PYTHONPATH,以便 sys.path 将包含我添加到 PYTHONPATH 的路径。根据本文档,这似乎是它的工作方式:

http://docs.python.org/c-api/intro.html#embedding-python

但是,当我从 Python-land 打印 sys.path 时,它具有 PYTHONPATH 的原始内容,而不是我设置的内容。这是我正在做的一个例子(使用Boost.Python):

PS - 我知道还有其他方法可以实现我的目标,但这不是我要问的。我想知道为什么 Py_Initialize() 在设置 sys.path 时不使用 PYTHONPATH 的当前值。或者也许我误解了它应该如何工作?

0 投票
1 回答
608 浏览

boost - 嵌入式 Python 加载模块但不加载该模块的内部导入语句

终于(!)我编译了 Boost::Python 并让我的 XCode 项目导入了一个本地模块。该模块以 line 开头from xml.dom import minidom,但是当它执行时,我得到了这个错误:

但是,我知道我已经安装了 xml Python 模块——当我从命令提示符打开 Python 并键入from xml.dom import minidom时,一切都很顺利。此外,当我导入模块时,它的行为与我预期的一样。

我怀疑 sys.path 有问题,所以我比较了我从提示中得到的那个和我的嵌入式模块中使用的那个。唯一的区别是嵌入的 sys.path 不包含 ''。我试过附加它,但这并没有改变行为。

我还怀疑嵌入式版本访问的 Python 版本与我从提示中使用的版本不同,但 sys.prefix 在两次执行之间匹配。

这是导入我的模块并运行它的代码。目前它非常简单(甚至还没有引用计数),因为此时我只想确保我能够嵌入我的模块(我是一个完全新手 C++ 程序员)。

我可能误解了关于 boost::python 的一些重要内容。谁能帮我吗?

0 投票
2 回答
624 浏览

c++ - 使用 C++ 嵌入\扩展 Python 时的复杂数据结构

Python 文档很好地介绍了使用 C\C++ 扩展和嵌入 Python。但是,在许多情况下,需要在语言之间传输复杂的数据结构。

实现这一目标的最佳方法是什么?

0 投票
1 回答
481 浏览

python - 在 C\C++ 中嵌入 Python 时 Python 打印输出

如果语句在 python 函数中,那么Pythonprint将在哪里print从嵌入式 Python 配置中的 C\C++ 调用?