Mitchell Murphy
Mitchell Murphy

Reputation: 231

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.

Upvotes: 16

Views: 11169

Answers (3)

Christoffer Lindell
Christoffer Lindell

Reputation: 71

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

Upvotes: 5

Nate Scarlet
Nate Scarlet

Reputation: 601

This is because you installed pyinstaller globally.

Use pipenv install -d pyinstaller before packing.

Upvotes: 15

Mitchell Murphy
Mitchell Murphy

Reputation: 231

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.

Upvotes: 5

Related Questions