相关疑难解决方法(0)

使用动态版本的Python执行嵌入式python代码时出现致命的Python错误

SPOILER:部分解决(见最后).

以下是使用Python嵌入的代码示例:

#include <Python.h>
int main(int argc, char** argv)
{
    Py_SetPythonHome(argv[1]);
    Py_Initialize();
    PyRun_SimpleString("print \"Hello !\"");
    Py_Finalize();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用gcc 4.8.5在Linux openSUSE 42.2下工作(但我在使用gcc 4.8.3的openSUSE 13.2或使用gcc 4.4.7的RedHat 6.4时也遇到了同样的问题).

我编译了Python 2.7.9的静态和动态版本(但我在Python 2.7.13中也遇到了同样的问题).

我使用以下命令编译链接到Python静态版本的示例:

g++ hello.cpp -o hello \
-I /home/caduchon/softs/python/2.7.9/64/gcc/4.8.5/static/include/python2.7 \
-L /home/caduchon/softs/python/2.7.9/64/gcc/4.8.5/static/lib \
-l python2.7 -l pthread -l util -l dl
Run Code Online (Sandbox Code Playgroud)

如果我在参数中使用静态版本的Python执行我的示例,它就可以工作.

如果我在参数的动态版本的Python上执行它,我会收到以下错误(它发生在Py_Initialize()):

> ./hello /home/caduchon/softs/python/2.7.9/64/gcc/4.8.5/dynamic
Fatal Python error: PyThreadState_Get: no current thread
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它适用于静态版本,它不适用于动态版本.我该如何解决这类问题?

编辑:我安装Python的脚本如下:

#!/bin/bash

WORKDIR=/home/caduchon/tmp/install_python_2_7_13
ARCHIVEDIR=/home/caduchon/downloads/python
PYTHON_VERSION='2.7.13'
EZ_SETUP_VERSION='0.9'
SETUPTOOLS_VERSION='34.1.0'
CYTHON_VERSION='0.25.2'
NUMPY_VERSION='1.12.0'
SCIPY_VERSION='0.18.1' …
Run Code Online (Sandbox Code Playgroud)

c++ python python-embedding boost-python

14
推荐指数
1
解决办法
653
查看次数

将软件包添加到Windows的Python“嵌入式”安装中

文档中

嵌入式发行版是一个包含最小Python环境的ZIP文件。

听起来不错!Python的64位Windows嵌入式v3.6.5仅13MB。作为编译的替代方法,我想将一些python脚本以及在未安装Python的Win10机器上运行它们所需的最低要求一起压缩。

现在,我几乎总是需要导入其他软件包来提供功能。但是,如果我想与该嵌入式版本的Python一起发送python脚本,就无法确定该怎么做。例如,如果我的脚本使用numpy,如何在“嵌入”中包含该库?即,这样我就可以在任何Win10机器上解压缩单个部署文件并立即执行我的脚本吗?

(通常pip install numpy会创建一个超过50MB的Lib子目录!但是对于“嵌入式”部署,我不需要任何调试支持,也不需要大量文件中包含的任何其他内容。)

python embed

9
推荐指数
3
解决办法
3574
查看次数

Micropython或最小的python安装

我曾经读过关于最小的python安装,没有很多python默认安装附带的库但是在网上找不到它...

我想要做的只是打包一个脚本,其中包含执行它并使其可移植所需的python内容.

有没有人知道这样的事情?

谢谢

python

8
推荐指数
1
解决办法
1万
查看次数

Python pip 从 pip freeze 的输出中找出基本要求

我的朋友刚开始学习 Python 和 Flask,并且缺少很多“最佳实践”,例如requirements.txt文件。

他最近向我寻求帮助,为了使项目干净,我想设置一个 CI 服务(Travis),但我需要先制定这个文件。

由于他最初没有requirements.txt,所以我能得到的所有信息都是他的import陈述,以及他的输出pip freeze

由于无法区分项目的直接需求和其中一个包的间接需求,我想从列表中找出所有“顶级”包。“顶级包”是列表中另一个包不需要的包。例如,urllib3is required by requests,所以当requests存在时,urllib3最好不要出现在最终结果中。

有没有办法实现这一目标?


如果有人想帮助我解决这个特定的实例,这里是输出pip freeze

apturl==0.5.2
arrow==0.12.1
asn1crypto==0.24.0
binaryornot==0.4.4
blinker==1.4
Bootstrap-Flask==1.0.9
Brlapi==0.6.6
certifi==2018.1.18
chardet==3.0.4
Click==7.0
colorama==0.3.7
command-not-found==0.3
configparser==3.5.0
cookiecutter==1.6.0
cryptography==2.1.4
cupshelpers==1.0
decorator==4.1.2
defer==1.0.6
distro-info==0.18
dominate==2.3.5
Flask==1.0.2
Flask-Bootstrap4==4.0.2
Flask-Login==0.4.1
Flask-Mail==0.9.1
Flask-Moment==0.6.0
Flask-SQLAlchemy==2.3.2
Flask-WTF==0.14.2
future==0.17.1
httpie==0.9.8
httplib2==0.9.2
idna==2.6
ipython==5.5.0
ipython-genutils==0.2.0
itsdangerous==1.1.0
Jinja2==2.10
jinja2-time==0.2.0
keyring==10.6.0
keyrings.alt==3.0
language-selector==0.1
launchpadlib==1.10.6
lazr.restfulclient==0.13.5
lazr.uri==1.0.3
louis==3.5.0
macaroonbakery==1.1.3
Mako==1.0.7
MarkupSafe==1.1.0
mysqlclient==1.3.14 …
Run Code Online (Sandbox Code Playgroud)

python pip

5
推荐指数
1
解决办法
767
查看次数

从 C++ 项目 (Visual Studio) 使用参数调用 Python 函数

我需要在 Windows 平台下从我的 C++ 项目中调用实现为 Python (3.6) 函数的管道。来自文件“ experiment_test.py ”的函数“ function_name ”将文本字符串作为输入参数,并返回另一个文本字符串作为结果。我尝试了下面的代码,但它不能正常工作 - 库shutilcodecsmakedirs等中的python 函数不起作用。

C++ 代码(减少):

std::string Text,Result;
PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
Py_Initialize();

pName = PyUnicode_FromString("experiment_test");
pModule = PyImport_Import(pName);    
pDict = PyModule_GetDict(pModule);

pFunc = PyDict_GetItemString(pDict, "function_name");

pArgs = PyTuple_New(1);
pValue = PyUnicode_FromString(Text.c_str());
PyTuple_SetItem(pArgs, 0, pValue);

if (PyCallable_Check(pFunc))
{
    pValue = PyObject_CallObject(pFunc, pArgs);
    if (pValue != NULL)
    {
        Result = PyUnicode_AsUTF8(pValue);    
        Py_DECREF(pValue);
    }
    else return false;    
}
// ...

Py_Finalize();
Run Code Online (Sandbox Code Playgroud)

Python代码(减少): …

c++ python

4
推荐指数
1
解决办法
3590
查看次数

如何从C ++执行python

我有一个C ++程序,需要对用Python编写的库进行某些调用。(而不是用C ++重写整个库...)

最简单的方法是什么?我需要将2个数字传递到库中,并取回2个数字。

我需要它可移植并且可以在Windows和Linux中运行,因此例如不可能使用POSIX popen。

到目前为止,我最好的解决方案是编写一个python包装程序,由C ++代码中的“系统”调用来调用,该程序使用命令行参数,调用该函数,并将结果写入文件,然后由文件打开。 C ++程序。

如果您知道更好的话,请告诉我...

c++ python

3
推荐指数
1
解决办法
78
查看次数

标签 统计

python ×6

c++ ×3

boost-python ×1

embed ×1

pip ×1

python-embedding ×1