Problems with bdist_app on Windows 10 (panda3d 1.10.7)

I’m attempting to build a distribution of my panda3d app, and I’m running into the following error. It seems to be related to open3d, not panda3d itself, but I wasn’t sure where to ask to get help for the distribution tools.

I ran this command: python setup.py bdist_app

I received this error while it was attempting to collect all the dependencies:

ERROR: Could not find a version that satisfies the requirement pandocfilters>=1.4.1 (from nbconvert->notebook->open3d==0.10.0.0->-r D:\repos\hearts-for-hearing\requirements.txt (line 1)) (from versions: none) ERROR: No matching distribution found for pandocfilters>=1.4.1 (from nbconvert->notebook->open3d==0.10.0.0->-r D:\repos\hearts-for-hearing\requirements.txt (line 1))

Here is my setup.py file:

from setuptools import setup

setup(
    name="landmarks",
    options = {
        'build_apps': {
            'gui_apps': {
                'landmarks': 'src/app/app.py',
            },
            'platforms': [
                'win_amd64',
            ],
        }
    }
)

So, what’s odd to me is that i HAVE pandocfilters==1.4.2 installed in the venv i am attempting to build this distribution from, and I can even find the pandocfilters wheel file in the pip cache directory!?

Any help here would be appreciated.

pandocfilters doesn’t have wheels hosted on PyPI. If you have built your own wheels of it, you need to use -f path/to/wheels on a line on its own in requirements.txt so that they can be located.

hmm, i’m a bit of a noob with-regard-to python and python dependencies, but somhow I have what I believe is a pandocfilters wheel file (path on my windows machine is: wheels\f6\08\65\e4636b703d0e870cd62692dafd6b47db27287fe80cea433722\pandocfilters-1.4.2-py3-none-any.whl)

I didn’t build it myself, so where else could it come from? Can I put the path to this wheel file in requirements.txt?

If anyone else has a similar issue:

My requirements.txt file now looks like:

open3d==0.10.0.0
panda3d==1.10.7
pyntcloud==0.1.2
trimesh==3.8.8
shapely==1.7.1
networkx==2.5
-f C:\\users\\drrea\\appdata\\local\\pip\\cache\\wheels\\f6\\08\\65\\e4636b703d0e870cd62692dafd6b47db27287fe80cea433722\\pandocfilters-1.4.2-py3-none-any.whl

It was able to find the wheel file! But now I am stuck on the next missing dependency…at least I have a bit better understanding of how to solve this.

Thanks!

When you install a package using “pip”, it first builds a wheel, so that’s probably how it got built in the first place.

FWIW, I just added tornado, pyrsistent and pandocfilters to our thirdparty wheel index, so they should now work out of the box, without need for any custom -f flags.

However, your requirements.txt has a total of 66 dependencies, which you may want to reconsider due to the sheer size of what you’re pulling in (including various web frameworks). Given this number of libraries you’re bound to encounter quite some issues, with many of these not having been tested with our deployment system.

1 Like

Thanks for adding those wheels!

I was able to get my distro to build (with some warnings), however it crashes immediately when I attempt to run it after installation.

I made a very pared down example and attempted to build an installer, install and run it, and it also crashes (with the same errors in the log file, IIRC).

Here is my ‘app’:

from direct.showbase.ShowBase import ShowBase
if __name__ == '__main__':
    base = ShowBase()

    base.run()

Here is my setup.py:

from setuptools import setup

setup(
    name="landmarks",
    options = {
        'build_apps': {
            'gui_apps': {
                'landmarks': 'src/panda3d/panda_test.py',
            },
            'platforms': [
                'win_amd64',
            ],
            'log_filename': 'D:\\repos\\hearts-for-hearing\\output.log',
            'log_append': False,
            'plugins': [
                'pandagl',
            ],
        },
        'bdist_apps': {
            'installers': {
                'win_amd64': 'nsis'
            }
        }
    }
)

Here is my requirements.txt

panda3d==1.10.7

Here is the my output.log file after attempting to run the installed app:

Traceback (most recent call last):
  File "__main__", line 1, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "direct.showbase.ShowBase", line 40, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "panda3d.core", line 1, in <module>
  File "imp", line 342, in load_dynamic
  File "importlib._bootstrap", line 702, in _load
  File "importlib._bootstrap", line 657, in _load_unlocked
  File "importlib._bootstrap", line 556, in module_from_spec
  File "importlib._bootstrap_external", line 1101, in create_module
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
ImportError: DLL load failed while importing core: The specified procedure could not be found.

I did notice the following warnings when running bdist_apps:

(env) (base) D:\repos\hearts-for-hearing>python setup.py bdist_apps       
running bdist_apps
running build_apps
Building platforms: win_amd64
Gathering wheels for platform: win_amd64
Looking in indexes: https://pypi.org/simple, https://archive.panda3d.org/simple/opt, https://archive.panda3d.org/thirdparty
Collecting panda3d==1.10.7
  File was already downloaded d:\repos\hearts-for-hearing\build\__whl_cache__\win_amd64_cp38\panda3d-1.10.7+opt-cp38-cp38-win_amd64.whl
Successfully downloaded panda3d
Building runtime for platform: win_amd64
There are some missing modules: ['__builtin__', '_posixsubprocess', 'grp', 'zipimport']
warning: build_apps: could not find dependency VCRUNTIME140.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-math-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-locale-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-string-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-runtime-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-stdio-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-convert-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-time-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-environment-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-heap-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-conio-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-filesystem-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency VCRUNTIME140.dll (referenced by deploy-stubw.exe)

Copying game files for platform: win_amd64

Any insight would be appreciated!

Can you try upgrading your version of Panda3D (the one you’re producing the build with, which is different from what is in requirements.txt) to 1.10.7?

Hmm, according to pip list in the venv that I am building the distro from, I do have 1.10.7 installed:

(env) D:\repos\hearts-for-hearing>pip list
Package             Version
------------------- ---------
-ip                 20.2.1
argon2-cffi         20.1.0
async-generator     1.10
attrs               20.2.0
backcall            0.2.0
bleach              3.2.1
certifi             2020.6.20
cffi                1.14.3
colorama            0.4.3
cycler              0.10.0
decorator           4.4.2
defusedxml          0.6.0
entrypoints         0.3
ipykernel           5.3.4
ipython             7.18.1
ipython-genutils    0.2.0
ipywidgets          7.5.1
jedi                0.17.2
Jinja2              2.11.2
jsonschema          3.2.0
jupyter-client      6.1.7
jupyter-core        4.6.3
jupyterlab-pygments 0.1.2
kiwisolver          1.2.0
MarkupSafe          1.1.1
matplotlib          3.3.2
mistune             0.8.4
nbclient            0.5.0
nbconvert           6.0.6
nbformat            5.0.7
nest-asyncio        1.4.1
networkx            2.5
notebook            6.1.4
numpy               1.19.2
open3d              0.10.0.0
packaging           20.4
panda3d             1.10.7
...

Obviously, the installer forgets the dll files. The fact is that it works without packaging in.

I’m not certain exactly what you mean here, but I included the ‘warnings’ just to be thorough. The bottom-line is that even if the warnings are not important, the very simple app still does not run (see contents of output.log above)

I mean, I recreated your example and ran it. And it works from the win_amd64 folder, the installer did not try. Most likely, the installer does not contain the necessary DLL files for some reason.

If you run the .exe from the build/win_amd64 folder directly, does it work?

The warnings are interesting, because I could have sworn that we fixed them in 1.10.7. Is vcruntime140.dll actually included in the build/win_amd64 directory?

No, still does not work.

What is strange is that the directory contains all the .dlls that bdist_apps was complaining it could not find!?

Directory of D:\repos\hearts-for-hearing\build\win_amd64

10/02/2020  10:43 AM    <DIR>          .
10/02/2020  10:43 AM    <DIR>          ..
10/02/2020  10:43 AM            26,816 api-ms-win-crt-multibyte-l1-1-0.dll
10/02/2020  10:43 AM            19,648 api-ms-win-crt-process-l1-1-0.dll
10/02/2020  10:43 AM            19,136 api-ms-win-crt-utility-l1-1-0.dll
10/02/2020  10:43 AM        12,211,520 cg.dll
10/02/2020  10:43 AM           439,104 cgGL.dll
10/02/2020  10:43 AM         3,125,856 landmarks.exe
10/02/2020  10:43 AM         3,381,792 libcrypto-1_1.dll
10/02/2020  10:43 AM           349,184 libp3direct.dll
10/02/2020  10:43 AM           450,048 libp3dtool.dll
10/02/2020  10:43 AM         1,209,344 libp3dtoolconfig.dll
10/02/2020  10:43 AM           189,952 libp3interrogatedb.dll
10/02/2020  10:43 AM           140,800 libp3windisplay.dll
10/02/2020  10:43 AM        16,931,328 libpanda.dll
10/02/2020  10:43 AM         2,565,632 libpandaexpress.dll
10/02/2020  10:43 AM           621,056 libpandagl.dll
10/02/2020  10:43 AM           633,120 MSVCP140.dll
10/02/2020  10:43 AM        12,087,808 panda3d.core.pyd
10/02/2020  10:43 AM           894,976 panda3d.direct.pyd
10/02/2020  10:43 AM         4,195,912 python38.dll
10/02/2020  10:43 AM            26,696 select.pyd
10/02/2020  10:43 AM         1,096,264 unicodedata.pyd
10/02/2020  10:43 AM            87,864 VCRUNTIME140.dll
10/02/2020  10:43 AM            84,040 _bz2.pyd
10/02/2020  10:43 AM            45,640 _hashlib.pyd
10/02/2020  10:43 AM           252,488 _lzma.pyd
10/02/2020  10:43 AM            78,920 _socket.pyd
              26 File(s)     61,164,944 bytes
               2 Dir(s)  79,064,141,824 bytes free

Even more interesting…I installed the panda3d sdk (1.10.7) from the downloadable installer, and built the asteroids example both in my system python environment and my venv that I have been using above.

When I build from my system python environment it builds and runs fine. It also did not give me the warnings about not being able to find these .dlls:

E:\Program Files\Panda3D-1.10.7-x64\samples\asteroids>python setup.py bdist_apps
running bdist_apps
running build_apps
Building platforms: win_amd64
Gathering wheels for platform: win_amd64
Looking in indexes: https://pypi.org/simple, https://archive.panda3d.org/simple/opt, https://archive.panda3d.org/thirdparty
Collecting panda3d
  File was already downloaded e:\program files\panda3d-1.10.7-x64\samples\asteroids\build\__whl_cache__\win_amd64_cp38\panda3d-1.10.7+opt-cp38-cp38-win_amd64.whl
Successfully downloaded panda3d
Building runtime for platform: win_amd64
There are some missing modules: ['__builtin__', '_posixsubprocess', 'grp', 'zipimport']
Copying game files for platform: win_amd64

Writing /e/Program Files/Panda3D-1.10.7-x64/samples/asteroids/build/win_amd64/models/plane.egg.bam

Building zip for platform: win_amd64

However, when I build from my venv I get an error about the plane.egg.bam file:

(env) E:\Program Files\Panda3D-1.10.7-x64\samples\asteroids>python setup.py bdist_apps
running bdist_apps
running build_apps
Building platforms: win_amd64
Gathering wheels for platform: win_amd64
Looking in indexes: https://pypi.org/simple, https://archive.panda3d.org/simple/opt, https://archive.panda3d.org/thirdparty
Collecting panda3d
  File was already downloaded e:\program files\panda3d-1.10.7-x64\samples\asteroids\build\__whl_cache__\win_amd64_cp38\panda3d-1.10.7+opt-cp38-cp38-win_amd64.whl
Successfully downloaded panda3d
Building runtime for platform: win_amd64
There are some missing modules: ['__builtin__', '_posixsubprocess', 'grp', 'zipimport']
Copying game files for platform: win_amd64
egg2bam failed: Command '['egg2bam', '-o', 'E:\\Program Files\\Panda3D-1.10.7-x64\\samples\\asteroids\\build\\win_amd64\\models\\plane.egg.bam', '-pd', 'E:\\Program Files\\Panda3D-1.10.7-x64\\samples\\asteroids\\models', '-ps', 'rel', 'models\\plane.egg']' returned non-zero exit status 4294967295.

Building zip for platform: win_amd64

It lead me to believe that perhaps I have an issue with my venv’s Config.prc file, however when I try to build my app in my system’s python environment it still gives me the ‘missing dll’ warnings:

d:\repos\hearts-for-hearing>python setup.py bdist_apps
running bdist_apps
running build_apps
Building platforms: win_amd64
Gathering wheels for platform: win_amd64
Looking in indexes: https://pypi.org/simple, https://archive.panda3d.org/simple/opt, https://archive.panda3d.org/thirdparty
Collecting panda3d==1.10.7
  File was already downloaded d:\repos\hearts-for-hearing\build\__whl_cache__\win_amd64_cp38\panda3d-1.10.7+opt-cp38-cp38-win_amd64.whl
Successfully downloaded panda3d
Building runtime for platform: win_amd64
There are some missing modules: ['__builtin__', '_posixsubprocess', 'grp', 'zipimport']
warning: build_apps: could not find dependency VCRUNTIME140.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-math-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-locale-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-string-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-runtime-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-stdio-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-convert-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-time-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-environment-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-heap-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-conio-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency api-ms-win-crt-filesystem-l1-1-0.dll (referenced by python38.dll)

warning: build_apps: could not find dependency VCRUNTIME140.dll (referenced by deploy-stubw.exe)

Copying game files for platform: win_amd64

Building zip for platform: win_amd64

Very confusing…

Yeah, it’s a bug in the warning reporting system. You can feel free to ignore the warnings.

What I find interesting is that the extracted file does not work when importing panda3d.core. One reason I can think of is that there might be a conflicting installation of Panda3D on your system. Either you are running the produced binary from a venv from which Panda is installed, or you have a system-wide installation of Panda3D whose DLLs are being used.

If that’s not the reason, I would download Dependency Walker (depends.exe), and then load panda3d.core.pyd into it, and see if you can see any error messages.

Ok, I was finally able to get my minimal example working properly. On to my full app…It has trouble loading pandas (seems pyntcloud has pandas as a dependency… =/ ):

Traceback (most recent call last):
  File "pandas", line 30, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pandas._libs", line 13, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pandas._libs.interval", line 1, in <module>
  File "imp", line 342, in load_dynamic
  File "importlib._bootstrap", line 702, in _load
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap_external", line 1109, in exec_module
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "pandas\_libs\hashtable.pxd", line 8, in init pandas._libs.interval
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pandas._libs.hashtable", line 1, in <module>
  File "imp", line 342, in load_dynamic
  File "importlib._bootstrap", line 702, in _load
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap_external", line 1109, in exec_module
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "pandas\_libs\missing.pxd", line 11, in init pandas._libs.hashtable
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pandas._libs.missing", line 1, in <module>
  File "imp", line 342, in load_dynamic
  File "importlib._bootstrap", line 702, in _load
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap_external", line 1109, in exec_module
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "pandas\_libs\tslibs\nattype.pxd", line 9, in init pandas._libs.missing
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 961, in _find_and_load_unlocked
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pandas._libs.tslibs", line 30, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pandas._libs.tslibs.conversion", line 1, in <module>
  File "imp", line 342, in load_dynamic
  File "importlib._bootstrap", line 702, in _load
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap_external", line 1109, in exec_module
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "pandas\_libs\tslibs\base.pxd", line 4, in init pandas._libs.tslibs.conversion
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'pandas._libs.tslibs.base'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "__main__", line 5, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "core", line 2, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "core.fit_plane", line 2, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 961, in _find_and_load_unlocked
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 961, in _find_and_load_unlocked
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 961, in _find_and_load_unlocked
  File "importlib._bootstrap", line 219, in _call_with_frames_removed
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pyntcloud", line 1, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pyntcloud.core_class", line 4, in <module>
  File "importlib._bootstrap", line 991, in _find_and_load
  File "importlib._bootstrap", line 975, in _find_and_load_unlocked
  File "importlib._bootstrap", line 671, in _load_unlocked
  File "importlib._bootstrap", line 827, in exec_module
  File "pandas", line 34, in <module>
ImportError: C extension: No module named 'pandas._libs.tslibs.base' not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --inplace --force' to build the C extensions first.

I understand this is not a panda3d issue, but I would appreciate any suggestions. Thanks for all the helpful hints so far!

Ah, I see what you mean now. On my machine it would not run from the ‘build’ folder either. It was due to a problem with my visual studios redistributable runtime installation.

I ended up giving up on bdist_apps. I got it working using pyinstaller instead. Just a recommendation: Mention pyinstaller in the Distribution docs as an alternative.