Хобрук: Ваш путь к мастерству в программировании

Импорт подстановочных знаков Pyinstaller

У меня есть этот кусок кода

from module1 import *

feature1() # from module1

Я получаю исключение NameError

NameError: global name 'feature1' is not defined

Он отлично работает в python main.py, но когда я использую pyinstaller для компиляции, мой исполняемый файл выдает исключение NameError. Как мне это исправить?


Ответы:


1
  1. Убедитесь, что модуль1 существует и определен

  2. Убедитесь, что функция 1 существует в модуле 1.

  3. Убедитесь, что feature1 — это функция, а не что-то еще (например, тип или объект).

  4. Если вы используете виртуальную среду, убедитесь, что пакет установлен там и

4а. Убедитесь, что вы запускаете свой скрипт из виртуальной среды.

06.03.2019
  • Все функции и модули существуют и правильно типизированы. Это также работает в virtualenv, но не в pyinstaller. 06.03.2019
  • @AidanH Вы проверили эту тему stackoverflow.com/questions/15114695/pyinstaller-import- ошибка ? 06.03.2019
  • Я проверил это, и я могу импортировать module1, но я не могу получить доступ к функции внутри. 06.03.2019
  • @AidanH Какую версию Python вы используете? 06.03.2019
  • @AidanH Я видел, как многие люди боролись с Python 3.7, и многие сочли использование 3.5 более успешным. Может быть, вы попробуете эту версию? 07.03.2019
  • Я это проверю. 07.03.2019

  • 2

    Вы действительно не должны использовать import *, это значительно усложняет определение того, откуда берутся объекты - любые многочисленные линтеры просто не будут работать.

    Попробуйте сделать:

    from module1 import *
    dir()
    

    это скажет вам, что было импортировано и доступно для использования. Если feature1 нет, то у вас есть свое объяснение — если оно есть, вам предстоит более сложное путешествие.

    06.03.2019
  • feature1 действительно отображается в Python, но я не верю, что он импортируется в мой исполняемый файл pyinstaller. 06.03.2019

  • 3

    При компиляции скрипта с помощью pyinstaller используйте команду pyinstaller -p /Path/To/Your/Module1/Folder main.py

    Это добавит каталог, содержащий ваши скрипты, в переменную PATH и добавит ваш module1.py в скомпилированный exe.

    06.03.2019
    Новые материалы

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..