belangeo / pyo

Python DSP module
GNU Lesser General Public License v3.0
1.28k stars 130 forks source link

Import error after compiling from source #194

Closed jarpy closed 3 years ago

jarpy commented 3 years ago

Hi,

I'm trying to compile pyo from source (so I can work on a patch).

I get an import error after following the instructions for 64 bit Linux:

In [1]: import pyo
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-af2598963ba6> in <module>
----> 1 import pyo

~/src/belangeo/pyo/pyo/__init__.py in <module>
     25 
     26 from .lib._maps import *
---> 27 from .lib import analysis as analysis
     28 from .lib.analysis import *
     29 from .lib import controls as controls

~/src/belangeo/pyo/pyo/lib/analysis.py in <module>
     30 """
     31 
---> 32 from ._core import *
     33 from ._maps import *
     34 from ._widgets import createSpectrumWindow, createScopeWindow

~/src/belangeo/pyo/pyo/lib/_core.py in <module>
     56     import pyo as current_pyo
     57 else:
---> 58     from .._pyo import *
     59     import pyo as current_pyo
     60 

ModuleNotFoundError: No module named 'pyo._pyo'

This Dockerfile replicates the error:

FROM python:3.7

RUN apt-get update
RUN apt-get install -y \
  libjack-jackd2-dev \
  liblo-dev \
  libportmidi-dev \
  libsndfile-dev \
  portaudio19-dev \
  python3-dev \
  python3-pil.imagetk \
  python3-pip \
  python3-tk

WORKDIR /usr/src/pyo
COPY . .
RUN python3 setup.py install --use-double
CMD ["python3", "-c", "import pyo"]
$ docker build --tag=pyo . && docker run pyo
[...]
Successfully built 491ba576c67e
Successfully tagged pyo:latest
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/pyo/__init__.py", line 27, in <module>
    from .lib import analysis as analysis
  File "/pyo/lib/analysis.py", line 32, in <module>
    from ._core import *
  File "/pyo/lib/_core.py", line 58, in <module>
    from .._pyo import *
ModuleNotFoundError: No module named 'pyo._pyo'
jarpy commented 3 years ago

Aha! As long as the current working direcory is not the source directory, it works.

root@03b9f0f72677:/usr/src/pyo# python -c 'import pyo'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/src/pyo/pyo/__init__.py", line 27, in <module>
    from .lib import analysis as analysis
  File "/usr/src/pyo/pyo/lib/analysis.py", line 32, in <module>
    from ._core import *
  File "/usr/src/pyo/pyo/lib/_core.py", line 58, in <module>
    from .._pyo import *
ModuleNotFoundError: No module named 'pyo._pyo'

root@03b9f0f72677:/usr/src/pyo# cd ..

root@03b9f0f72677:/usr/src# python -c 'import pyo'

WxPython is not found for the current python version.
Pyo will use a minimal GUI toolkit written with Tkinter (if available).
This toolkit has limited functionnalities and is no more
maintained or updated. If you want to use all of pyo's
GUI features, you should install WxPython, available here:
http://www.wxpython.org/
belangeo commented 3 years ago

Nice catch! Indeed, pyo.py (the python frontend) exists as a source file in the repo, but the backend part (the compiled library) is not there, only the C sources. So if you import pyo from the repo, it looks around to import the .so file and doesn't find it...