pipenv и pyinstaller не упаковывают зависимости

Я новичок в python. Я пытаюсь создать исполняемый файл моего проекта python, который запускается в pipenv. Однако, когда я пытаюсь скомпилировать и запустить код с помощью pyinstaller, он не может найти никаких зависимостей, поскольку они не установлены глобально. Я не хочу устанавливать их глобально, это должна быть развертываемая сборка, которая не требует какой-либо настройки, кроме exe.

Я что-то упускаю? Это вообще правильный путь?

Я могу легко запустить проект так:

pipenv run python iot.py

У него есть зависимость:

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

И я пытаюсь скомпилировать проект так:

pipenv run pyinstaller --onefile iot.py

Он создает исполняемый файл, который не может найти импортированные модули.

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

Я так ошибаюсь в своих попытках или просто недостающее звено?

Спасибо за любую помощь.


person Mitchell Murphy    schedule 19.02.2018    source источник


Ответы (3)


Это потому, что вы установили pyinstaller глобально.

Перед упаковкой используйте pipenv install -d pyinstaller.

person Nate Scarlet    schedule 04.06.2018

Я обнаружил, что pyinstaller не упаковывает зависимости внутри pipenv.

Если я установлю зависимости глобально, я могу отправить exe.

А пока я сделаю машину сборки, которая будет обрабатывать загрузку зависимостей и сборку exe.

person Mitchell Murphy    schedule 21.02.2018

Вы можете указать pyinstaller, чтобы он смотрел в виртуальную среду, созданную pipenv, при поиске необходимых модулей.

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

$ pipenv run pyinstaller --paths path\to\.virtualenvs\project project.py
person Christoffer Lindell    schedule 11.01.2020