16

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.

Mitchell Murphy
  • 231
  • 2
  • 7

3 Answers3

14

This is because you installed pyinstaller globally.

Use pipenv install -d pyinstaller before packing.

Nate Scarlet
  • 551
  • 5
  • 7
5

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.

Mitchell Murphy
  • 231
  • 2
  • 7
5

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