[Windows] No pipe types in the packaged .exe version of the project created with the tobspr/RenderPipeline

Hi, I recently started using panda3d and the render pipeline of tobspr. I experimented with it a bit, and now I want to try to package a project.

I installed panda via pip and the render pipeline too. I packaged everything with the pyinstaller because I couldn’t get the setuptools from the manual to work properly.

The project works completely fine if I run it from the code. Now, if I do all this and put all the necessary files from the render-pipeline in the directory with the .exe, I get this error:

:display: loading display module: libpandagl.dll
:display(warning): Unable to load libpandagl.so: Module not found
Known pipe types:
(all display modules loaded.)
Traceback (most recent call last):
  File "main2.py", line 120, in <module>
  File "main2.py", line 49, in __init__
  File "rpcore\render_pipeline.py", line 160, in create

  File "rpcore\render_pipeline.py", line 476, in _init_showbase
    self.pre_showbase_init()
  File "direct\showbase\ShowBase.py", line 339, in __init__
  File "direct\showbase\ShowBase.py", line 1021, in openDefaultWindow
  File "direct\showbase\ShowBase.py", line 1056, in openMainWindow
  File "direct\showbase\ShowBase.py", line 766, in openWindow
  File "direct\showbase\ShowBase.py", line 746, in <lambda>
  File "direct\showbase\ShowBase.py", line 818, in _doOpenWindow
  File "direct\showbase\ShowBase.py", line 647, in makeDefaultPipe
  File "direct\directnotify\Notifier.py", line 130, in error
Exception: No graphics pipe is available!
Your Config.prc file must name at least one valid panda display
library via load-display or aux-display.
[13464] Failed to execute script main2

The weird thing is that I specified the libpandagl.dll at the end of the config provided from the render-pipeline like this:

load-display pandagl

How could I solve that problem?

I really appreciate any help you can provide.

Hi, welcome to the forums!

Here’s your problem:

It means you didn’t package libpandagl.dll, which is the render plug-in responsible for interfacing with OpenGL.

It didn’t package the file automatically but I tried to put the libpandagl.dll file from the pip installation to the .exe file and in the config folder. Still no change. Is there a special directory where I have to put it or where does it search for it? Is there a way to tell the pyinstaller to package the file like the other python libraries?

Do you still get “Module not found” despite libpandagl.dll being in the same folder as the .exe, or did the error message change? It might be that some other required dll, like CgGL.dll is missing.

The directory where Panda searches in is configurable, via the plugin-path setting in the .prc file, but it should not be necessary.

Please note that the deployment system that comes with Panda3D does all these things for you. If you are having problems with it, we could help you with those.

Okay, now I added 2 more .dll files to the directory.

  • CgGL.dll
  • libp3windisplay.dll

Now I don’t have an error. Instead, it doesn’t do anything.

:display: loading display module: libpandagl.dll
Known pipe types:
  wglGraphicsPipe
(all display modules loaded.)
:display:windisplay: OS version: 10.0.2.19042
:display:windisplay:
:display:windisplay: max Mhz 4101000000, current Mhz 4101000000
:ShowBase: Default graphics pipe is wglGraphicsPipe (OpenGL).

Maybe the Panda3D distribution system would be great to get it working. I copied the Panda3D Hello World example from the manual to test if it works without the render pipeline. I also copied the astroids example from the distribution example and made some changed to it.

from setuptools import setup

setup(
    name="test",
    options = {
        'build_apps': {
            'include_patterns': [
                'source/*.png',
                'source/*.bam',
            ],
            'console_apps': {
                'test': 'example.py',
            },
            'plugins': [
                "pandagl"
            ],
            'platforms': [
                'win_amd64',
                "win32"
            ]
        }
    }
)

I ran the bdist_apps command and tried to open the test.exe file in the build/win_amd64 directory.

I used the specification console_apps to see error messages. If I switch it to gui_apps, it doesn’t start, and if I run it from the console, it immediately closes without any message.
If I am leaving the specification console_apps, it doesn’t start either, but I get this error while running it from the console:

Traceback (most recent call last):
  File "importlib._bootstrap_external", line 1353, in _path_importer_cache
KeyError: 'C:\\GitHub\\Ursina Tests\\whl\\build\\win_amd64'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "__main__", line 66, in <module>
  File "__main__", line 12, in __init__
  File "direct.showbase.ShowBase", line 179, in __init__
  File "direct.showbase.ShowBase", line 546, in __setupProfile
  File "importlib", line 127, in import_module
  File "importlib._bootstrap", line 1030, in _gcd_import
  File "importlib._bootstrap", line 1007, in _find_and_load
  File "importlib._bootstrap", line 982, in _find_and_load_unlocked
  File "importlib._bootstrap", line 925, in _find_spec
  File "importlib._bootstrap_external", line 1414, in find_spec
  File "importlib._bootstrap_external", line 1383, in _get_spec
  File "importlib._bootstrap_external", line 1355, in _path_importer_cache
  File "importlib._bootstrap_external", line 1331, in _path_hooks
  File "importlib._bootstrap_external", line 1601, in path_hook_for_FileFinder
  File "importlib._bootstrap_external", line 1476, in __init__
  File "importlib._bootstrap_external", line 171, in _path_isabs
AttributeError: module 'nt' has no attribute '_path_splitroot'

This is an issue introduced in a recent version of Python. A few users have run into it now, but I have not had time to look into it. As a work around, you can try using Python 3.8.

Thanks for your quick help! I switched to python 3.7 and it worked. I had some problems getting the plugins for the render pipeline packaged too, but I found out that I need to import all once and the packager packages all plugins. Maybe there would be a better solution but it works great.

Thanks you

Can you tell me what steps you have done in order to get the render pipeline built with the pyinstaller?

So I have never really made it work with pyinstaller but I made it work with the setuptools from the pandas explanation.

Unfortunately, I am not sure how I completely made it work with the pipeline. I remember that I had some issues that the setuptools have never found all the libraries of the pipeline. I think I fixed that issue by dummy importing all the modules the pipeline needs, so the setuptools packages all the files correctly.

# Plugins for packaging
from rpplugins import ao, bloom, clouds, color_correction, dof, env_probes, forward_shading, fxaa, motion_blur, pssm, scattering, skin_shading, sky_ao, smaa, ssr, volumetrics, vxgi
from rpplugins.ao import plugin
from rpplugins.bloom import plugin
from rpplugins.clouds import plugin
from rpplugins.color_correction import plugin
from rpplugins.dof import plugin
from rpplugins.env_probes import plugin
from rpplugins.forward_shading import plugin
from rpplugins.fxaa import plugin
from rpplugins.motion_blur import plugin
from rpplugins.pssm import plugin
from rpplugins.scattering import plugin
from rpplugins.skin_shading import plugin
from rpplugins.sky_ao import plugin
from rpplugins.smaa import plugin
from rpplugins.ssr import plugin
from rpplugins.volumetrics import plugin
from rpplugins.vxgi import plugin

If it helps the project I needed it for was a try to create a framework for game development with pandas. I wanted to have multiple predefined classes for easier and faster development. Unfortunately, I had to put it on the back burner.

https://github.com/LarsZauberer/Hekate

On the wiki page, there is a section with publishing. There I explained how to use my autopacking.py tool. Maybe you want to look into the script where it automatically copies all the files from the pipeline in the right folder and packages the pandas project.

Sorry that I am not able to present you with the solution anymore. I haven’t worked with the library in a while.