#pyinstaller #ruamel.yaml
#pyinstaller #ruamel.yaml
Вопрос:
Я не могу упаковать ruamel.yaml с использованием PyInstaller.
Я использовал следующий простой тестовый пример:
from ruamel.yaml import YAML
parser = YAML(typ="safe", pure=True)
print(parser.load("17"))
Это работает нормально при обычном запуске, но создает это исключение после упаковки с помощью PyInstaller:
ImportError: cannot import name 'YAML' from 'ruamel.yaml' (/tmp/_MEIsScRyt/ruamel/yaml/__init__.pyc)
Я могу частично обойти эту проблему, сославшись на YAML
as ruamel.yaml.main.YAML
, но различные свойства упоминаются ruamel.yaml
внутри библиотеки, и я не могу их изменить.
Как я могу убедиться, что PyInstaller правильно упаковывает весь ruamel.пакет yaml?
Я использую последнюю версию PyInstaller, установленную через pip3, 4.2.dev0
.
Ответ №1:
Если вы можете ссылаться на ruamel.yaml.main.YAML
, но не на ruamel.yaml.YAML
, похоже, что pyinstaller неправильно устанавливает ruamel.yaml
, __init__.py
как это делает:
from ruamel.yaml.main import *
Вы должны проверить, доступен ли этот файл в subdir ruamel/yaml
.
В общем, вам следует сравнить файловую иерархию, которую PyInstaller создает / сохраняет, с результатом how `ruamel.yaml должен быть установлен, как указано в документации:
pip install ruamel.yaml
В setup.py
пакетах of all и есть некоторые исправления ruamel.*
ruamel.*.*
для правильной установки этих вложенных пакетов с пространством имен. Однако это только с учетом и протестировано с использованием pip
. Установщики, которые не на 100% совместимы с pip
, могут делать недопустимые предположения и не устанавливать правильно.