问题标签 [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.
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 + 清单,因此它在系统范围内可用。但是我不想要求我的用户运行它,也不想尝试将其安装在正确的位置并自己处理版本控制等。
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 应用程序捆绑的脚本中导入函数,这是一个合适的解决方案吗?
python - 嵌入 Python 3 - 没有内置函数?
在大量脱发后,我正在寻求帮助。
我将 Python 3.3 嵌入到一个简单的应用程序中。一个不寻常的方面是 Python 不在路径上,但似乎一切正常。但是由于某种原因,什么都不能执行。
下面是一个显示错误的小示例程序:
编辑:我知道引用计数是可怕的——这只是一个简单的例子。
我尝试了多种方式来导入和定义内置函数,包括如下所示的各种尝试:
它们都不起作用-每个错误都相同。
我究竟做错了什么?它与路径有关吗?关于我做错的内置函数?
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
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 编程的新手,所以任何正确方向的指针都将不胜感激。
谢谢
python - 将 Python 脚本嵌入 C 的最简单和最快的方法?
我一直在研究用于将我的 python 脚本嵌入到 C 中的 Python/C API。我想知道是否有一种简单(或更简单)的方法可以嵌入我的 python 脚本,而不必过多地参与 python/c API。我应该提到(因为我不确定这是否会成为问题)在我的 python 脚本中,我在我的 python 脚本中使用了许多其他模块(确切地说是 NumPy、SciPy、Matplotlib 和 Mayavi)。您能提供的任何帮助或建议将不胜感激。
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。
我想知道是否有人遇到过这个问题并且可能知道如何解决这个问题。
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
文件夹链接发布版本...最坏的情况我不会不介意将库从复制PCBuild
到libs
有趣的是,它最接近我想要实现的目标,但它输出
jam
解析器似乎很弱......任何提示或提示都会有所帮助
编辑 2:试图简化问题,我将其更改user-config.jam
为仅包含以下内容:
并使用以下命令行:
正如预期的那样,它找不到.lib
所以我决定将我的PCBuild
文件夹克隆到libs
其中,以便可以访问我构建的所有库......但这样做之后,无需更改.jam
或命令行......它现在正在寻找 Python 2.6?!?
我越深入,我就越困惑......而且,一个失败了,另一个失败LNK1104
了LNK1181
......
c++ - PyRun_SimpleString 对于 def foo() 失败:
对于名称/路径中包含 unicode(widechar)的文件,我无法让 PyRun_SimpleFile 工作(FILE* 兼容性问题),因此这个问题!
因此,我决定自己打开 python 脚本,然后使用 PyRun_SimpleString 执行每一行。
此处显示的伪代码。
上面在下面的 def 语句中给出了错误(<- 如下所示)
Python版本是2.7
我想用它来显示如果/它失败的脚本的行号。许多其他人似乎使用 PyRun_SimpleString 取得了成功!
提前致谢。