окрестности:
- На сервере, который может правильно запустить алгоритм (В противном случае продукты, упакованные на обычных компьютерах (могут отсутствовать драйвера cuda или nvidia и т.п.), недоступны)
- Запустите контейнер algo docker и смонтируйте код алгоритма (Необходимо использовать исходный код Python, нельзя использовать динамическую библиотеку cython.) (справочная команда: docker run -it --name one_file -v /home/imsight/one_file/ct_chest_lung_nodule/:/appRegistration.heehee.com/software Dev…/бин/баш)
инструмент:
Установите pyinstaller (pip install pyinstaller -imirrors.aliyun.com/pypi/simple)
Бэйл:
pyinstaller -F main.py (платформа radiation использует main.py в качестве файла запуска)
Когда pyinstaller упакован, некоторые специальные файлы зависимостей не будут помещены, и могут быть добавлены дополнительные объявления, например: --add-binary '/usr/lib/x86_64-linux-gnu/libxcb.so.1:.'
Если есть проблема с отсутствием библиотек во время выполнения, исходя из опыта, рекомендуемые методы решения следующие:
Если отсутствующая библиотека определена в файле .py,Рекомендуется использовать крючки для замены скрываемых.
Например, во время выполнения, если библиотека elasticapm отсутствует, вам нужно будет по очереди добавить скрытую библиотеку (каждый раз, когда вы упаковываете и запускаете, вы можете найти одну недостающую):
«elasticapm.transport», «elasticapm.transport.http», «elasticapm.processors», «elasticapm.instrumentation.packages», «elasticapm.instrumentation.packages.django» и т. д.
Очень много времени.
Создайте папку, например, с названием hooks, поместите в нее hook-elasticapm.py, содержимое всего 2 предложения.
from PyInstaller.utils.hooks import collect_submoduleshiddenimports = collect_submodules('elasticapm')
В pyinstaller добавление --additional-hooks-dir=./hooks может решить проблему отсутствия библиотеки в серии elasticapm.
При упаковке фляги-лимитера возникла следующая ошибка:
pkg_resources.DistributionNotFound: The 'werkzeug' distribution was not found and is required by the application
Добавьте следующие два предложения к крючку, чтобы решить:
from PyInstaller.utils.hooks import collect_submoduleshiddenimports = collect_submodules('flask_limiter')# 新增这两句,解决pkg_resources.DistributionNotFound: The 'werkzeug' distribution was not found and is required by the applicationfrom PyInstaller.utils.hooks import copy_metadatadatas = copy_metadata('werkzeug')
Примечание: Хоть pip и называется flask-limiter, но при импорте модуля он flask_limiter, поэтому хук-файл должен быть hook-flask_limiter.py, и файл тоже нужно писать как flask_limiter, иначе он будет неудачным (множественный тест проверка)
Если библиотека определена в динамической библиотеке, сгенерированной cython, следует использовать --hidden-import
Например, зашифрованный пароль модели слишком важен, чтобы отображаться в виде открытого текста в проекте, к которому могут получить доступ несколько человек.
Один из подходов заключается в реализации операции расшифровки этой модели в репозитории, к которому имеют доступ лишь очень немногие люди.
После cythonization выводится бинарная динамическая библиотека, причем динамическая библиотека напрямую вызывается кодом алгоритма проекта.
Поскольку pyinstaller не может напрямую искать информацию об импорте в этом cythonized файле, он должен быть добавлен с помощью скрытого импорта, такого как библиотека Crypto.Cipher.
Таким образом, при упаковке pyinstaller будет добавлена библиотека Crypto.Cipher.
Продукт:
По умолчанию в папке dist создается исполняемый файл типа main (main.py с удаленным суффиксом).
контрольная работа:
Обязательно протестируйте, если вы упаковываете отсутствующую библиотеку, явного сбоя не видно, необходимо протестировать, запустив
бегать:
Выполнить dist/main
Уведомление:
В настоящее время исполняемый файл, упакованный ubuntu18.04, не может работать на ubuntu16.04 (поскольку 18.04 требует версии GLIBC>=2.25)
Поэтому, если исполняемый файл основан на python3.6 и выше, рекомендуется запаковать его в ubuntu18.04 и запустить на докере ubuntu18.04.
Ниже приведена команда для запуска на основе образа общедоступной версии ubuntu:18.04:
docker run -it --rm --name sentinel_docker --privileged --device /dev/bus/usb:/dev/bus/usb -v /home/imsight/one_file/ct_chest_lung_nodule:/app -v /data:/data -p 6314:6314 ubuntu:18.04 bash -c "export LANG=C.UTF-8;cd /app;./dist/main"