equinor / segyio

Fast Python library for SEGY files.
Other
471 stars 213 forks source link

Python tests fail: No module named 'segyio._segyio' #511

Closed yurivict closed 2 years ago

yurivict commented 2 years ago

setup.py test fails:

_____________________________________________________________________________ ERROR collecting test/segyio_c.py ______________________________________________________________________________
ImportError while importing test module '/disk-samsung/freebsd-ports/science/py-segyio/work-py38/segyio-1.9.7/python/test/segyio_c.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test/segyio_c.py:13: in <module>
    import segyio._segyio as _segyio
E   ModuleNotFoundError: No module named 'segyio._segyio'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================================================== 1 error in 0.62 seconds ===================================================================================
*** Error code 2

Python-3.8 FreeBSD 13

jokva commented 2 years ago

Is the python extension built and made available? Try setup.py build_ext --inplace build and see if the problem persists.

yurivict commented 2 years ago

import segyio succeeds.

Not sure why does the test run import segyio._segyio,

jokva commented 2 years ago

The segyio_c tests specifically targets the C++ code in the extension, so it has to import it. Since loading it is expensive and makes (some) tests slightly harder to develop, it is not imported until it is requested. Starting fresh I'd not make the same mistake again, but this is expected behaviour as-of now.

yurivict commented 2 years ago

After setup.py build_ext --inplace tests pass.

But this command isn't run during the package build. Does this mean that some functionality is missing?

jokva commented 2 years ago

No, not really, just that it's the more ergonomic approach. The problem is that setup.py build by default won't move the python extension (_segyio.so) into the source tree, and the build- and package scripts run the tests they do against the source tree. If you do setup.py install it will make sure to bring the _segyio.so file too, and the tests would pass again.

By doing it this way, some things are still functional even without building (or moving) the .so, and there was not too much incentive to change it, since anyone coming across it is likely a developer (or packager) and would want to build with --inplace or pip install -e . anyway.

yurivict commented 2 years ago

Ok, thanks!

jokva commented 2 years ago

No problem!