2014年,我编写了一个PyQt4应用程序,该应用程序内部使用了一个非PyQt模块,并且应有的工作近两年。现在,非PyQt模块已经在PyQt应用程序中按预期停止了工作(我有qt4和qt5端口,这两个共享问题)。下面是一个示例代码来说明发生了什么:
#! /usr/bin/env python3
import sys, getopt
from PyQt5.QtWidgets import QApplication # or PyQt4
# non PyQt module:
import mymodule
# demo of the mymodule use. It returns nested list
# with info about objects saved in fname
fname = "/my/file/name"
res0 = mymodule.getnames(fname)
# res0 = [[...],...,[...]] the way it should
#
app = QApplication(sys.argv)
...
# with or without actual run of the application via
# app.exec_()
...
res2 = mymodule.getnames(fname)
# this time the result is:
# res2 = None
最初,我从PyQt应用程序中调用mymodule的方法,它返回了嵌套列表,现在返回了None。我试图找到任何解释或澄清,为什么观察到的行为已更改但未更改。
我已经隔离了负责将mymodule行为呈现给调用
QApplication([sys.argv])
的代码,并且想知道是否有人知道发生了什么。最让我感到困扰的是,该模块在应用程序启动之前就可以正常运行,但此后不再可用。有关mymodule的更多详细信息:
它是用mymodule.c编写并通过
python setup.py install
调用安装的C库的包装。感谢您的任何提前评论!
[编辑]有关mymodule的更多信息:
mymodule.c代码段
#include <Python.h>
#include <extlib.h>
#include <math.h>
...
static PyObject * mymodule_getnames(PyObject *self, PyObject *args)
{
char *filename;
if (!PyArg_ParseTuple(args, "s", &filename))
return NULL;
FILE *fp = extlib_func(filename);
...
PyObject *names = PyList_New(0);
...
PyList_Append(names, Py_BuildValue("s", title));
...
return names;
}
...
int main(int argc, char *argv[])
{
Py_SetProgramName(
#if PY_MAJOR_VERSION >= 3
(wchar_t *)
#endif
argv[0]);
Py_Initialize();
return 0;
}
最佳答案
我通过不使用anaconda作为我的python软件包管理器解决了该问题。通过将所有内容安装到系统中,它又可以正常工作。但是问题仍然存在,因为它为什么不能在anaconda中运行(但是已经运行了这么长时间)仍然超出了我的范围。
我已经发布了这个答案,但是如果有人对现象进行了解释,我将不接受它。如果过了一段时间没有其他答复,我会将其标记为接受,以使问题池更加整洁。
谢谢大家的时间和建议。
关于python - QApplication启动后,非PyQt模块停止工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40466172/