'pipenv and pyinstaller not packaging dependencies

I'm fairly new to python I'm trying to create an executable of my python project that is run in pipenv. However, when I try and compile and run the code using pyinstaller it can't find any dependencies since they aren't installed globally. I don't want to install them globally, this is supposed to be a deployable build that shouldn't require any setup beyond just the exe.

Am I missing something? Is this even the right way to go?

I can run the project easily like so:

pipenv run python iot.py

It has a dependency:

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

And I try and compile the project like so:

pipenv run pyinstaller --onefile iot.py

It creates an executable that fails to find imported modules.

Traceback (most recent call last):
  File "iot.py", line 18, in <module>
ImportError: No module named AWSIoTPythonSDK.MQTTLib
[48823] Failed to execute script iot

Am I just so off in my attempt or is there just a simple missing link?

Thanks for any help.



Solution 1:[1]

This is because you installed pyinstaller globally.

Use pipenv install -d pyinstaller before packing.

Solution 2:[2]

I found that pyinstaller won't package dependencies inside the pipenv.

If I install the dependencies globally I can ship the exe.

For now, I'll make a build machine that handles downloading dependencies and building the exe.

Solution 3:[3]

You can tell pyinstaller to look in the virtual env created by pipenv when searching for the required modules.

$ pipenv --venv
path\to\.virtualenvs\project

$ pipenv run pyinstaller --paths path\to\.virtualenvs\project project.py

Sources

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

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Mitchell Murphy
Solution 3 Christoffer Lindell