相关疑难解决方法(0)

当您使用 Cython 编译独立的可执行文件时,是否可以使用其他 python 模块,例如 pandas 和 numpy?

我正在尝试将 python 脚本转换为 Cython 可执行二进制文件。它还使用其他模块,如 Tensorflow、pandas、numpy、matplotlib、seaborn 和 pickle。这是我的编译命令。

cython --embed -o foo.c foo.pyx

gcc -Os -o FOOEXE foo.c -I /usr/include/python3.6m/ -L/workdirectory/somePythonEnviroment-venv/lib -lpython3.6m -lpthread -lm -lutil -ldl

我用 pip 下载了所有必需的模块,并将其作为 python 脚本运行就可以了。当我使用 cython magic 将其编译为 C 二进制文件时。它说的第一件事
import pandas as pd 没有名为“pandas”的模块

我同意这一点。我曾假设它也会编译所有包含的模块并将其放入二进制文件中。如何包含 pandas 模块?如何将使用 pip 安装的任何 python 模块包含到 cython 项目中。cython 是否仅适用于 python.h 中的基本 Python 代码和库?我需要原始的 python 模块文件和可执行文件吗?

python compilation cython pandas

7
推荐指数
0
解决办法
480
查看次数

是否可以将Cython代码编译为dll,以便C++应用程序可以调用它?

我有一个C++程序,它有一些插件结构:当程序启动时,它在插件文件夹中查找带有某些导出函数签名的dll,例如:

void InitPlugin(FuncTable* funcTable);
Run Code Online (Sandbox Code Playgroud)

然后程序将调用dll中的函数来初始化并将函数指针传递给dll.从那时起,dll可以与程序通信.

我知道Cython允许你在Python中调用C函数,但我不确定我是否可以编写一个Cython代码并将其编译为dll,这样我的C++程序就可以用它进行初始化.一个示例代码会很棒.

c++ python dll plugins cython

6
推荐指数
2
解决办法
1195
查看次数

使用 cython 从多个 pyx 文件生成可执行文件

我正在尝试从 python 源文件创建一个 unix 可执行文件。

我有两个文件,p1.py并且p2.py

p1.py:-

from p2 import test_func 
print (test_func())
Run Code Online (Sandbox Code Playgroud)

p2.py:-

def test_func():
    return ('Test')
Run Code Online (Sandbox Code Playgroud)

现在,正如我们所看到的,p1.py依赖于p2.py. 我想通过将两个文件组合在一起来制作一个可执行文件。我正在使用 cython。

我将文件名分别更改为p1.pyxp2.pyx

现在,我可以使用 cython 使文件可执行,

cython p1.pyx --embed
Run Code Online (Sandbox Code Playgroud)

它将生成一个名为 .c 的 C 源文件p1.c。接下来我们可以使用 gcc 使其可执行,

gcc -Os -I /usr/include/python3.5m -o test p1.c -lpython3.5m -lpthread -lm -lutil -ldl 
Run Code Online (Sandbox Code Playgroud)

但是如何将两个文件合并为一个可执行文件呢?

python cython cythonize

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

分发嵌入 Cython 编译的代码并使其在任何机器上工作所需的最少文件集

TL;DR:如何使用 Cython 作为分发方法而不是 Py2exe、cx_freeze、pyinstaller 等。


在用Cython制作一个可执行的,我想看看它怎么可能给一个Python程序分发到任何Windows用户(谁没有的Python已经安装了机上),通过用Cython第一编译它--embed

让我们使用一个test.py

import json
print(json.dumps({'key': 'hello world'}))
Run Code Online (Sandbox Code Playgroud)

并编译它:

cython test.py --embed
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
cl test.c /I C:\Python37\include /link C:\Python37\libs\python37.lib
Run Code Online (Sandbox Code Playgroud)

它可以工作并生成一个 140KB 的test.exe可执行文件。

test.exe在另一台机器上运行不能开箱即用,它需要:

即使这样,它仍然不起作用(下面的屏幕截图而不是复制/粘贴,因为我没有管理 VM 中的复制/粘贴 - 此处偏离主题)

ModuleNotFoundError:没有名为“编码”的模块

在此处输入图片说明

问题:分发--embed-Cython 编译的代码并使其在任何机器上运行(之前没有安装 Python)所需的最小文件集是什么?

python windows compilation cython cx-freeze

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

使用 cython --embed 时静态链接 python37.dll 和 vcruntime140.dll

假设我正在“cythonizing”这个test.py

import json
print(json.dumps({'key': 'hello world'}))
Run Code Online (Sandbox Code Playgroud)

和:

cython test.py --embed
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
cl test.c /I C:\Python37\include /link C:\Python37\libs\python37.lib
Run Code Online (Sandbox Code Playgroud)

正如分发嵌入 Cython 编译的代码并使其在任何机器上工作所需的最小文件集中提到的,有必要沿着文件分发python37.dllvcruntime140.dll的内容Lib\(作为Lib\或打包到 a 中python37.ziptest.exe

问题:如何修改cl.exe ...命令来要求编译器静态链接python37.dll到文件vcruntime140.dll内部test.exe

(这样就不再需要运输python37.dll和单独)vcruntime140.dll

python dll cython visual-c++ cl

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

标签 统计

cython ×5

python ×5

compilation ×2

dll ×2

c++ ×1

cl ×1

cx-freeze ×1

cythonize ×1

pandas ×1

plugins ×1

visual-c++ ×1

windows ×1