'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 |
