我有一个纯Python脚本,我想分发给具有未知Python配置的系统.因此,我想将Python代码编译为独立的可执行文件.
我cython --embed ./foo.py没有问题就跑了foo.c.然后,我跑了
gcc $(python3-config --cflags) $(python3-config --ldflags) ./foo.c
Run Code Online (Sandbox Code Playgroud)
哪里python3-config --cflags给
-I/usr/include/python3.5m -I/usr/include/python3.5m -Wno-unused-result -Wsign-compare -g -fdebug-prefix-map=/build/python3.5-MLq5fN/python3.5-3.5.3=. -fstack-protector-strong -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
Run Code Online (Sandbox Code Playgroud)
并python3-config --ldflags给出
-L/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -L/usr/lib -lpython3.5m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
Run Code Online (Sandbox Code Playgroud)
这样我就可以获得一个没有问题的动态链接可执行文件.ldd a.out产量
linux-vdso.so.1 (0x00007ffcd57fd000)
libpython3.5m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0 (0x00007fda76823000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fda76603000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fda763fb000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fda761f3000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fda75eeb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fda75b4b000)
libexpat.so.1 => …Run Code Online (Sandbox Code Playgroud) 考虑以下简单代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0,np.pi,0.001)
f = np.sin(x)
plt.figure(figsize=(10,10))
plt.plot(x,f)
plt.ioff()
plt.show()
plt.savefig('Sine')
Run Code Online (Sandbox Code Playgroud)
在这里,我希望 Python在关闭图形窗口后保存图形。当然,这不是很有用,但在原始代码中,我想以图形方式操作图形,然后保存更改。
上面的代码在我的上一个 Python 版本(Debian 2.? 版本)上运行良好,但是由于我使用 Python 3.4 更改为 SuSe 13.2,它只是不停地运行整个代码。
在这个主题上确实存在其他线程,比如Matplotlib python show() 立即返回,但这些解决方案对我不起作用 - 我尝试matplotlib.interactive(False)为 matplotlib 选择各种不同的后端(目前我正在使用'QT4Agg')。