相关疑难解决方法(0)

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

使用 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 --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 ×2

python ×2

cl ×1

cythonize ×1

dll ×1

gcc ×1

linker ×1

visual-c++ ×1