在嵌入C++应用程序的解释器中导入pyomo.inveron模块时崩溃

2024-05-16 15:46:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用PyoMo程序包在复杂的C++应用程序中进行一些计算。嵌入式Python解释器运行的C++模块是共享库,它是主应用程序的插件。主应用程序使用dlopen/dlsym调用插件

环境

-Debian 10.3 x86_64

-Python v.3.7.3(默认值)

-通用条款第5.8.3.0节

该错误发生在导入pyomo.environ子包时:

#include <Python.h>
...
Py_Initialize();
PyRun_SimpleString("import pyomo.environ");

在执行PyRun_SimpleString("import pyomo.environ");字符串后,我看到以下输出:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pyomo/environ/__init__.py", line 69, in _import_packages
    _do_import(pname)
  File "/usr/local/lib/python3.7/dist-packages/pyomo/environ/__init__.py", line 16, in _do_import
    importlib.import_module(pkg_name)
  File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/local/lib/python3.7/dist-packages/pyomo/common/__init__.py", line 27, in <module>
    from ._task import pyomo_api, PyomoAPIData, PyomoAPIFactory
  File "/usr/local/lib/python3.7/dist-packages/pyomo/common/_task.py", line 22, in <module>
    import pyutilib.workflow
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/workflow/__init__.py", line 17, in <module>
    from pyutilib.workflow.executable import ExecutableResource
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/workflow/executable.py", line 5, in <module>
    import pyutilib.services
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/services/__init__.py", line 10, in <module>
    from pyutilib.services.services import registered_executable, register_executable, TempfileManager
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/services/services.py", line 13, in <module>
    from pyutilib.component.config import TempfileManager
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/component/config/__init__.py", line 22, in <module>
    from pyutilib.component.config.logging_config import LoggingConfig
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/component/config/logging_config.py", line 14, in <module>
    import logging.handlers as handlers
  File "/usr/lib/python3.7/logging/handlers.py", line 28, in <module>
    import queue
  File "/usr/lib/python3.7/queue.py", line 16, in <module>
    from _queue import Empty
ImportError: /usr/lib/python3.7/lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PyExc_MemoryError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/pyomo/environ/__init__.py", line 97, in <module>
    _import_packages()
  File "/usr/local/lib/python3.7/dist-packages/pyomo/environ/__init__.py", line 81, in _import_packages
    raise ImportError(msg)
ImportError: pyomo.environ failed to import pyomo.common.plugins:
Original ImportError: /usr/lib/python3.7/lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PyExc_MemoryError
Traceback:
  File "/usr/local/lib/python3.7/dist-packages/pyomo/environ/__init__.py", line 69, in _import_packages
    _do_import(pname)
  File "/usr/local/lib/python3.7/dist-packages/pyomo/environ/__init__.py", line 16, in _do_import
    importlib.import_module(pkg_name)
  File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/local/lib/python3.7/dist-packages/pyomo/common/__init__.py", line 27, in <module>
    from ._task import pyomo_api, PyomoAPIData, PyomoAPIFactory
  File "/usr/local/lib/python3.7/dist-packages/pyomo/common/_task.py", line 22, in <module>
    import pyutilib.workflow
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/workflow/__init__.py", line 17, in <module>
    from pyutilib.workflow.executable import ExecutableResource
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/workflow/executable.py", line 5, in <module>
    import pyutilib.services
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/services/__init__.py", line 10, in <module>
    from pyutilib.services.services import registered_executable, register_executable, TempfileManager
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/services/services.py", line 13, in <module>
    from pyutilib.component.config import TempfileManager
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/component/config/__init__.py", line 22, in <module>
    from pyutilib.component.config.logging_config import LoggingConfig
  File "/usr/local/lib/python3.7/dist-packages/pyutilib/component/config/logging_config.py", line 14, in <module>
    import logging.handlers as handlers
  File "/usr/lib/python3.7/logging/handlers.py", line 28, in <module>
    import queue
  File "/usr/lib/python3.7/queue.py", line 16, in <module>
    from _queue import Empty

澄清: 只有当解释器在动态加载的共享库中运行时,才会出现此问题。若我直接从python或解释器(嵌入到独立测试应用程序中)启动python代码,那个么一切都会按预期工作


Tags: inpyimportlibpackagesusrlocaldist