'Pyomo doesn't load when called via cython

I am trying to compile python code that runs pyomo on a RedHat 6 system, but pyomo.environ will not load. It’s not clear to me that this is a pyomo error because pyomo.environ package loads and runs fun when run from python, yet it fails when running from a cython c driver file. The python version is 3.76, pyomo version is 6.4 and cython version is 0.29.15 (Feb 10, 2020).

Here is my pyx file – test1.pyx:

from pyomo import environ as pyo
import cython

cdef public void run_test():

   m = pyo.ConcreteModel()

Here is my setup.py file (setup_test.py):

from setuptools import setup, Extension, Command
from Cython.Build import cythonize
import sys

setup(
    name='test1',
    ext_modules = cythonize([Extension("test1", ["test1.pyx"],include_dirs=['/Users/smith/.pyenv/versions/anaconda3-2021.11/include'])],compiler_directives={'language_level' : "3"} ),
    zip_safe=False,
)

This is built using “python setup_test.py build_ext -i” Here is my C driver file:

#include "test1.h"
#include <stdio.h>

int main(void){
   PyImport_AppendInittab("test1", PyInit_test1);
   Py_Initialize();
   PyImport_ImportModule("test1");
   run_test();
   Py_Finalize();
 
   return 1;
}

The driver file is built using: gcc main_test.c -ggdb -I/people/smith/metabolism -I/people/smith/.pyenv/versions/anaconda3-2020.02/include/python3.7m/ -L/people/smith/metabolism -L/people/smith/.pyenv/versions/anaconda3-2020.02/lib -Wl,-r path,/people/smith/.pyenv/versions/anaconda3-2020.02/lib/,-rpath,/people/smith/metabolism/ /people/smith/.pyenv/versions/anaconda3-2020.02/lib/libpython3.7m.so.1.0 -ltest1

Here is the output:

$ ./a.out

Traceback (most recent call last):
  File "test1.pyx", line 4, in init test1
    from pyomo import environ as pyo
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/environ/__init__.py", line 79, in <module>
    _import_packages()
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/environ/__init__.py", line 76, in _import_packages
    pkg.load()
 File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/opt/plugins/__init__.py", line 12, in load
    import pyomo.opt.plugins.driver
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/opt/plugins/driver.py", line 14, in <module>
    import pyomo.scripting.pyomo_parser
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/scripting/pyomo_parser.py", line 84, in <module>
    description=doc, epilog=epilog, formatter_class=CustomHelpFormatter )
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/argparse.py", line 1647, in __init__
    prog = _os.path.basename(_sys.argv[0])
IndexError: list index out of range
Exception ignored in: 'test1.run_test'
Traceback (most recent call last):
  File "test1.pyx", line 4, in init test1
    from pyomo import environ as pyo
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/environ/__init__.py", line 79, in <module>
    _import_packages()
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/environ/__init__.py", line 76, in _import_packages
    pkg.load()
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/opt/plugins/__init__.py", line 12, in load
    import pyomo.opt.plugins.driver
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/opt/plugins/driver.py", line 14, in <module>
    import pyomo.scripting.pyomo_parser
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/pyomo/scripting/pyomo_parser.py", line 84, in <module>
    description=doc, epilog=epilog, formatter_class=CustomHelpFormatter )
  File "/people/smith/.pyenv/versions/anaconda3-2020.02/lib/python3.7/argparse.py", line 1647, in __init__
    prog = _os.path.basename(_sys.argv[0])
IndexError: list index out of range


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source